Talía, miembro de este gran equipo de trabajo, nos hizo el favor de crear este post porque domina muy bien el tema.
Solución:
Acabo de encontrar el mismo problema y encontré la siguiente respuesta que parece funcionar para mí:
problema-usando-requerido-si-regla-de-validación-en-formulario-constructor
return [
'type_id' => 'required|integer',
'external_id' => 'required_if:type_id,==,3|nullable|integer',
];
resultado para mi:
campo no poblado, tipo id no 3 – aprobado
campo no completado, escriba id 3 – fallido – campo obligatorio
campo poblado, tipo id 3, no entero – falla en la regla de entero
campo poblado, escriba id 3, entero – pase – ¡todo bien!
nota: creo que la regla anulable vino en Laravel 5.3
Su regla realiza dos comprobaciones que son independientes entre sí; solo porque el external_id
El campo no es obligatorio cuando el type_id
!= 3, no significa que se ignore la comprobación de enteros.
Lo que está buscando es una regla condicional, que le brinda un control más preciso de cuándo realizar una verificación, por ejemplo:
$validator = Validator::make($data, [
'type_id' => 'required|integer'
]);
$validator->sometimes('external_id', 'required|integer', function($input)
return $input->type_id == 3;
);
Al usar la validación de formularios, puede acceder a la instancia del validador subyacente anulando el getValidatorInstance()
método:
class StoreRequest extends Request
public function authorize()
return true;
public function rules()integer'
];
protected function getValidatorInstance() integer', function($input)
return $input->type_id == 3;
);
return $validator;
valoraciones y reseñas
Tienes la opción de sostener nuestra función añadiendo un comentario y valorándolo te damos la bienvenida.