You can do exactly like you suggested.
public function store(ScheduleRequest $scheduleRequest)
{
if ($scheduleRequest->input('employee')) {
// THEN APPLY HERE THE EMPLOYEE REQUEST RULES
}
}
So you receive some data in the request and according to these data, you need to apply one or another rule ?
You can also apply conditional rules directly inside the form request. Here is an example how I have done in one of my projects.
I don't have the same fields according to the datasource.
public function rules(): array
{
$rules = [
'datasource' => 'required|in:'.implode(',',array_column(DatasourceEnum::cases(), 'value')),
'datasource_credentials' => 'required|array',
];
foreach (DatasourceEnum::cases() as $datasource) {
$fields = $datasource->credentialsFields();
if ($fields) {
foreach ($fields as $field) {
$rules['datasource_credentials.'.$field] = 'required_if:datasource,'.$datasource->value;
}
}
}
return $rules;
}
You can also check one of the fields to apply custom rules according to the type (employee, admin, ...).
public function rules(): array
{
$rules = [
'param1' => 'required|string',
'param2' => 'required|string',
'employee' => 'nullable|array',
'employee.name' => 'required_with:employee',
...
];
return $rules;
}