首页 > 解决方案 > 如何使表单中的动态字段得到验证和要求?

问题描述

我正在尝试将动态字段添加到表单中,这些字段至少有 2 个,然后您可以添加更多,每个添加的字段都应经过验证,如果在保存时将其保留在那里,则可以删除这些字段。我的问题是,当并非所有项目都具有这些字段时,如何使它们成为必需项。

我正在创建一个问题,当它的响应类型设置为多项选择时,这些字段将出现,其中两个选项是强制性的,并且可以添加更多选项。因此,仅当响应类型为多项选择时,这些字段并不总是必需的。

我不确定在哪里添加这些字段是必需的,我尝试在 vue 规则中添加它,但这在它没有得到验证的意义上不起作用,问题将在没有强制性两个的情况下保存选项。

这是到目前为止我的表单中的代码,其中添加了选项

<div v-if="form.response_type_id === 2">
    <el-divider></el-divider>
    <el-row>
        <el-col :span="22">
            <p class="el-form-item__label">Opciones</p>
        </el-col>
        <el-col :span="2">
            <div class="btn-link-plus action-button" @click="addOption()">
                <i class="fas fa-plus"></i>
            </div>
        </el-col>
    </el-row>
    <div v-for="(option, index) in questionOptions" :key="index">
        <el-row>
            <el-col :span="22">
                <el-form-item prop="option">
                    <el-input v-model="option.option"></el-input>
                </el-form-item>
            </el-col>
            <el-col :span="2">
                <div class="btn-link-delete action-button" @click="removeOption(index)"
                    :disabled="trashDisabled">
                        <i class="fas fa-trash-alt"></i>
                </div>
            </el-col>
        </el-row>
    </div>
</div>

这是我的问题的 SaveRequest

public function rules()
{
    return [
        'question' => 'required',
        'survey_section_id' => 'required|exists:survey_section,id',
        'response_type_id' => 'required|exists:response_types,id',
        'optional' => 'required'
    ];
}

我希望如果一个人正在创建一个问题并选择多项选择,他们需要始终添加两个选项,并且他们无法保存,直到这是真的。

任何帮助,将不胜感激!谢谢!

标签: laravelvue.jselement-ui

解决方案


你可以使用 requireIf

public function rules()
{
return [
    'question' => 'required',
    'survey_section_id' => 'required|exists:survey_section,id',
    'response_type_id' => 'required|exists:response_types,id',
    'optional' => Rule::requiredIf($request->response_type_id()=='multiple')
];
}

记得导入使用 Illuminate\Validation\Rule;


推荐阅读