0

I can't figure out how to get the required_if validation rule to work. It doesn't seem to run but probably because I am not using it correctly. All the other rules run but this rule doesn't seem to work. Can somebody tell me what I am doing wrong?

Here is the HTML (with Blade)

     <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> 

Here is the $rules array in my controller. There is no model for this form.

    $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();
    }
1
  • Edited to add the HTML for mailing_class_other field Commented Nov 18, 2014 at 19:08

1 Answer 1

1

It looks like all of your fields are being sent across in the the 'class_of_mail' array, so the $POST array will look something like:

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

Your validation for the mailing_class_other only kicks in if 'class_of_mail' == 'Other', which it doesn't, 'class_of_mail' actual equals array('Other').

I don't think Laravel has a way of handling this rule with array values, so I think your best bet is to conditionally add the rule like in this section of the documention: 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');
});

This will make the 'mailing_class_other' field required if the 'class_of_mail' array contains a value of 'Other'.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.