protected function extractFormRequest()
{
$reflection = $this->getActionReflection();
if (is_null($reflection)) {
return null;
}
foreach ($reflection->getParameters() as $parameter) {
// TODO Write the reasoning behind following lines.
try {
$class = $parameter->getClass();
} catch (\ReflectionException $e) {
break;
}
// Если аргумент нетипизирован, значит он уже не будет затянут через DI,
// И дальнейший обход не имеет смысла, так как все последующие аргументы
// тоже не будут затянуты через DI, не зависимо от того типизированы они или нет.
if (is_null($class)) {
break;
}
// Если это форм-реквест.
if (is_subclass_of($class->name, FormRequest::class)) {
// Для вызова нестатического метода на объекте, нам необходим инстанс объекта.
// Мы используем build вместо make, чтобы избежать автоматического запуска валидации.
$formRequest = app()->build($class->name);
// Здесь используется метод call, чтобы разрешить зависимости.
$rules = app()->call([$formRequest, 'rules']);
return ['class' => $class->name, 'rules' => $rules];
}
}
return null;
}