Проверка Laravel 4.2 required_if с массивом флажков

Я не могу понять, как заставить правило проверки required_if работать. Кажется, он не запускается, но, вероятно, потому, что я не правильно его использую. Все остальные правила работают, но это правило не работает. Может кто-нибудь сказать мне, что я делаю не так?

Вот HTML (с лезвием)

     <div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
{{ Form::checkbox('class_of_mail[]', 'Nonprofit Standard (Bulk)', null, ['data-id' => 'non-profit-standard-bulk']) }} Nonprofit Standard (Bulk)* <br />
{{ Form::checkbox('class_of_mail[]', 'Presorted Standard (Bulk)', null, ['data-id' => 'presorted-standard-bulk']) }} Presorted Standard (Bulk)* <br />
{{ Form::checkbox('class_of_mail[]', 'Presorted First Class (500 pieces or more)', null, ['data-id' => 'presorted-first-class']) }} Presorted First Class (500 pieces or more) <br />
{{ Form::checkbox('class_of_mail[]', 'First Class', null, ['data-id' => 'first-class']) }} First Class <br />
{{ Form::checkbox('class_of_mail[]', 'Campus', null, ['data-id' => 'campus']) }} Campus <br />
{{ Form::checkbox('class_of_mail[]', 'Other',  null, ['data-id' => 'class_of_mail_other']) }} Other <br />
{{ Form::checkbox('class_of_mail[]', 'Customer Provided List', null, ['data-id' => 'class_of_mail_customer_provided_list']) }} I would like to provide my own campus list <br />
</div>

<div id="mailing_class_other_div" class="form-group row hide">
{{ Form::label('mailing_class_other', 'Other Class of Mail', ['class' => 'control-label col-lg-12 col-md-12 col-sm-12 col-xs-12']) }}
<div class="col-lg-5 col-md-5 col-sm-5 col-xs-5">
{{ Form::text('mailing_class_other', null, ['class' => 'form-control input-sm']) }}
</div>
</div>

Вот массив $ rules в моем контроллере. Для этой формы нет модели.

    $rules = [
'department' => 'required|min:2|max:64',
'purchase_requisition' => 'required|min:2|max:64',
'contact_name' => 'required|min:2|max:64',
'contact_phone' => 'required|min:2|max:32',
'alt_contact_name' => 'required_with:alt_contact_phone',
'alt_contact_phone' => 'required_with:alt_contact_name',
'mailing_subject' => 'required|min:2|max:64',
'mailing_piece_count' => 'required|min:1|max:11',
'class_of_mail' => 'required',
## Here is the required_if validation rule ##
'mailing_class_other' => 'required_if:class_of_mail,Other',
];

$validator = Validator::make($input, $rules, $messages);

if ($validator->fails())
{
$messages = $validator->messages();
return Redirect::to('print-to-mail')->withErrors($validator)->withInput();
}

0

Решение

Похоже, что все ваши поля отправляются в 'class_of_mail' массив, так что $POST массив будет выглядеть примерно так:

array(
'class_of_mail' => array('Other'),
'mailing_class_other' => '...'
)

Ваше подтверждение для mailing_class_other только пинает, если 'class_of_mail' == 'Other'что это не так, 'class_of_mail' фактические равные array('Other'),

Я не думаю, что у Laravel есть способ обработки этого правила со значениями массива, поэтому я думаю, что вам лучше всего добавить правило условно, как в этом разделе документации: http://laravel.com/docs/4.2/validation#conditionally-adding-rules

$validator->sometimes('mailing_class_other', 'required', function($input)
{
return in_array($input->class_of_mail, 'Other');
});

Это сделает 'mailing_class_other' поле обязательно для заполнения, если 'class_of_mail' массив содержит значение 'Other',

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]