Как сделать динамические поля в форме проверенными и обязательными? - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь добавить динамические поля в форму, эти поля будут иметь минимум 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'
    ];
}

Мне бы хотелось, чтобы, если человек создает вопрос и выбирает множественный выбор, он должен всегда добавлять два варианта и не может сохранить их, пока это не станет правдой.

Любая помощь будет оценена! Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Вы можете попробовать следующее:

return [
    ...
    'questionOptions' => 'required_if:response_type_id,2|array|min:2',
];

questionOptions требуется только тогда, когда response_type_id равно 2;questionOptions должен быть массивом минимум из 2 элементов.

Если вы хотите, чтобы массив состоял ровно из 2 элементов, вы можете переключить min:2 для size:2.

Документы Laravel 6.x - Правила - Доступные правила - обязательный_if

Документы Laravel 6.x - Правила - Доступные правила - массив

Документы Laravel 6.x - Правила - Доступные правила - мин.

Документы Laravel 6.x - Правила - Доступные правила - размер

0 голосов
/ 14 октября 2019

вы можете использовать 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;

...