«Валидатор» Laravel «иногда» терпит неудачу с вложенными массивами

Я использую класс Laravel Validator для выполнения некоторой базовой проверки в массиве.

Мой массив:

 $employee['name']='name'; $employee['address']='address'; $employee['department']['department_name']='deptname'; $employee['department']['department_address']='deptaddress'; 

У меня есть правила проверки, как показано ниже:

 $rules = array( 'name'=> 'required', 'address' => 'required', 'department.department_name' => 'sometimes|required' ) 

И пользовательские сообщения, как показано ниже:

 $messages = array( 'name.required' => 'Employee Name is required', 'address.required' => 'Address is required' 'department.department_name.required' => 'Department name is required' ) 

Я буду использовать Validator::make($employee, $rules, $messages);

Согласно моим правилам, department_name должно быть проверено тогда и только тогда, когда оно присутствует в массиве. Но в настоящее время Validator не проверяет department_name когда он присутствует и пуст. Любые идеи, что я могу делать неправильно?

Вы немного ошибаетесь, смотрите здесь документы

там упоминается Если у меня есть $photos['profile'] тогда моя проверка будет выглядеть так

 $validator = Validator::make($request->all(), [ 'photos.profile' => 'required|image', ]); 

Из приведенного выше примера. В вашем случае это должно быть так

 $rules = array( 'name'=> 'required', 'address' => 'required', 'employee.department.department_name' => 'sometimes|required' ) 

Поскольку у вас есть массив вроде этого $employee['department']['department_name']

Так $message будет идти так

 $messages = array( 'name.required' => 'Employee Name is required', 'address.required' => 'Address is required' 'employee.department.department_name.required' => 'Department name is required' )