php - float - ¿Cómo validar la matriz en Laravel?
laravel validation float (4)
Intento validar la matriz POST en Laravel:
$validator = Validator::make($request->all(), [
"name.*" => ''required|distinct|min:3'',
"amount.*" => ''required|integer|min:1'',
"description.*" => "required|string"
]);
Envío POST vacío y obtengo esto
if ($validator->fails()) {}
como
False
.
Significa que la validación es verdadera, pero no lo es.
¿Cómo validar la matriz en Laravel?
Cuando envío el formulario con
input name="name[]"
Debe realizar un bucle sobre la matriz de entrada y agregar reglas para cada entrada como se describe aquí: Reglas de bucle
Aquí hay un código para ti:
$input = Request::all();
$rules = [];
foreach($input[''name''] as $key => $val)
{
$rules[''name.''.$key] = ''required|distinct|min:3'';
}
$rules[''amount''] = ''required|integer|min:1'';
$rules[''description''] = ''required|string'';
$validator = Validator::make($input, $rules);
//Now check validation:
if ($validator->fails())
{
/* do something */
}
El símbolo de asterisco (*) significa que desea verificar VALORES en la matriz, no en la matriz real.
$validator = Validator::make($request->all(), [
"name" => "required|array|min:3",
"name.*" => "required|string|distinct|min:3",
]);
En el ejemplo anterior:
- "Nombre" debe ser una matriz con al menos 3 elementos.
- Los valores en la matriz "nombre" deben ser cadenas distintas (únicas), de al menos 3 caracteres de longitud.
EDITAR: desde Laravel 5.5 puede llamar al método validate () directamente en el objeto Request de la siguiente manera:
$data = $request->validate([
"name" => "required|array|min:3",
"name.*" => "required|string|distinct|min:3",
]);
La forma recomendada de escribir la lógica de validación y autorización es colocar esa lógica en clases de solicitud separadas. De esta manera, el código de su controlador permanecerá limpio.
puede crear una clase de solicitud ejecutando
php artisan make:request SomeRequest
en el método de las reglas de la clase Solicitud () defina sus reglas de validación
//SomeRequest.php
public function rules()
{
return [
"name" =>[
''required'',
''array'', //input must be an array
''min:3''//there must be three members in the array
],
"name.*" => [
''required'',
''string'',//input must be of type string
''distinct'',//members of the array must be unique
''min:3''//each string must have min 3 chars
]
];
}
en su controlador escriba su función de ruta de esta manera
public function someFunction(SomeRequest $request)
{
//request is already validated before reaching this point
//your controller logic goes here
}
La clase de solicitud viene con ganchos / métodos de validación previa y posterior que se pueden personalizar según la lógica de negocios y casos especiales para modificar el comportamiento normal de la clase de solicitud.
Puede crear clases de Solicitud principal para solicitudes de tipo similar para, por ejemplo, solicitudes web y API y luego encapsular alguna lógica de solicitud común en estas clases principales.
Tengo esta matriz como mi solicitud de datos de una tabla / cuadrícula de datos HTML + Vue.js:
[0] => Array
(
[item_id] => 1
[item_no] => 3123
[size] => 3e
)
[1] => Array
(
[item_id] => 2
[item_no] => 7688
[size] => 5b
)
Y use esto para validar qué funciona correctamente:
$this->validate($request, [
''*.item_id'' => ''required|integer'',
''*.item_no'' => ''required|integer'',
''*.size'' => ''required|max:191'',
]);