phplaravelcustom-validators

Laravel rules with condition and custom error messages


I want to optimize the code to make it more efficient and scalable.

So I want to merge this part into one:

if($request->input('logintype') == 'register'){
    $validator = Validator::make($request->all(), [
        'option.*' => 'required|integer',
        'quantity.*' => 'required|integer',
        'conditions' => 'required',
        'comission' => 'required',
    ],[
        'option.integer' => 'Debe introducir una opción válida',
        'quantity.required' => 'Introduzca una cantidad a comprar',
        'quantity.integer'  => 'Debe introducir una cantidad válida',
        'quantity.*.max'  => 'Se ha superado el límite máximo de tickets por persona',
        'conditions.required'  => 'Debe aceptar los Términos y Condiciones',
        'comission.required'  => 'Debe seleccionar el método de pago',
    ]);

}
else{
    $validator = Validator::make($request->all(), [
        'option.*' => 'integer',
        'quantity.*' => 'required|integer',
        'comission' => 'required',
    ],[
        'option.integer' => 'Debe introducir una opción válida',
        'quantity.required' => 'Introduzca una cantidad a comprar',
        'quantity.integer'  => 'Debe introducir una cantidad válida',
        'quantity.*.max'  => 'Se ha superado el límite máximo de tickets por persona',
        'comission.required'  => 'Debe seleccionar el método de pago',

    ]);

}

I've check that this is possible with this code:

$validator->sometimes('conditions', 'required', function($request){
   return $request->input('logintype') == 'register';
});

But I'm unsure how to deal with the custom error messages.


Solution

  • You can achieve this by adding the extra comment to the validator.
    Just do like this

    $validator = Validator::make($request->all(), [
        'option.*' => 'required|integer',
        'quantity.*' => 'required|integer',
        'comission' => 'required',
    ],[
        'option.integer' => 'Debe introducir una opción válida',
        'quantity.required' => 'Introduzca una cantidad a comprar',
        'quantity.integer'  => 'Debe introducir una cantidad válida',
        'quantity.*.max'  => 'Se ha superado el límite máximo de tickets por persona',
        'conditions.required'  => 'Debe aceptar los Términos y Condiciones',
        'comission.required'  => 'Debe seleccionar el método de pago',
    ]);
    $validator->sometimes('conditions', 'required', function($request){
        return $request->input('logintype') == 'register';
    });
    

    It will validated your input fields and give your define error message check thisenter image description here

    And you can also add multiple field by array

    $validator->sometimes(['conditions','option'], 'required', function($request){
        return $request->input('logintype') == 'register';
    });
    

    Check this https://laravel.com/docs/5.5/validation#conditionally-adding-rules