2014-11-18 3 views
0

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

Вот 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 = [ 
     '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

Отредактировано для добавления HTML для поля mailing_class_other – Grasshopper

ответ

1

Похоже, все ваши поля посылаются через в в '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'.

+0

Спасибо. Я думаю, это сработает. – Grasshopper

Смежные вопросы