I have a controller that posts in multiple models at once. Also posts multiple times in one submit request there is a forloop inside the view. The form works the thing is because it uses multiple models I use
$data = $request->all(); then I validate after. Most documentation in regards to form validation shows adding rules and messages in regards to one model. I read about form validation and I did it for controllers that only post using one model. Just wondering if there any tips in regards to improving the validation. Like should I use $data = request->validated(…); multiple times?
$data = $request->all();
$rules = [
'first_name' => 'nullable',
'last_name' => 'nullable',
'email' => 'required|email',
'attachment_name' => 'nullable',
'attachment_size' => 'nullable',
'attachment' => 'required|mimes:pdf|max:2048',
];
$validation = Validator::make($data, $rules, $messages);
if ($validation->fails()) {
throw new ValidationException($validation);
}
if (!empty($data['experiences'])) {
if (count($data['experiences']) > 0) {
foreach ($data['experiences'] as $key => $experience) {
$rules = [
'experiences.' . $key . '.title' => 'required',
'experiences.' . $key . '.location' => 'required',
'experiences.' . $key . '.start_date' => 'required',
'experiences.' . $key . '.finish_date' => 'required',
];
$messages = [
'experiences.' . $key . '.title.required' => 'Title field is required for Experience -' . ($key + 1),
'experiences.' . $key . '.location.required' => 'Location field is required for Experience -' . ($key + 1),
'experiences.' . $key . '.start_date.required' => 'Start Date field is required for Experience -' . ($key + 1),
'experiences.' . $key . '.finish_date.required' => 'Finish Date field is required for Experience -' . ($key + 1),
];
$validation = Validator::make($data, $rules, $messages);
if ($validation->fails()) {
throw new ValidationException($validation);
}
$data['experiences'][$key]['start_date'] = Carbon::createFromFormat('d/m/Y',
$experience['start_date']);
$data['experiences'][$key]['finish_date'] ? Carbon::createFromFormat('d/m/Y', $education['finish_date'])
: null;
}
}
}
}