I created a "checklist" field with the following definition:
$this->crud->addField(
[ // Checklist
'label' => '<b>IDIOMAS</b>',
'type' => 'checklist',
'name' => 'idiomas',
'entity' => 'idiomas',
'attribute' => 'titulo',
'model' => "AppModelsIdioma",
'pivot' => false,
'number_of_columns' => 3,
'wrapper' => [
'class' => 'form-group col-md-6',
],
'tab' => 'HABILIDADES',
]
);
I tried to validate with the following rules:
'idiomas' => 'required|array|min:1',
//'idiomas.*' => 'required|integer|exists:idiomas,id',
With the intention of forcing at least some element to be required. I did a lot of tests, the first one was just to use the "required" option, but nothing worked.
Reviewing the form that prints in html, I see that at the end there is a hidden field as follows:
<input type="hidden" value="[]" name="idiomas">
So for validation we receive "[]" which is NOT an array and cannot be validated that way. Shouldn’t it be an array that you send? Because now it is a string of 2 characters that skips the validation of "required".
For the moment what I did was to set the rule:
'idiomas' => 'required|min:3'
And change the validation message with:
'idiomas.min' => 'Debe seleccionar al menos un elemento'
But I was left with the doubt: Is there a better way?
Is the way Backpack Laravel returns the value to validate correct?
Should it be an array?
2
Answers
If you want to validate at least 1 element, can use something like this:
Cheers.
I’m not familiar with Backpack, but if the hidden element’s value at initialization is
[]
I’m willing to bet it posts its data as a JSON string. To validate it, you’d need to decode the JSON first and then add it back into the request object. Here’s my suggestion: