@kirill-93

Как это реализовано в Laravel?

Если создать вот такой роут:
Route::get('product/{id}', 'ProductController@index');

То в контроллере параметр должен быть именно $id и никак иначе:
...
public function index(Product $id)  {
    //$id - продукт
}


То есть нельзя в роуте обозначить переменную как {id}, а в контроллере принимать $product.
Меня интересует как это реализовано? Как в пхп проверять названия входящих параметров?
  • Вопрос задан
  • 504 просмотра
Решения вопроса 1
@D3lphi
Это называется рефлексия. Пример:
$class = new \ReflectionClass('Название класса');  // Создаем объект для рефлексии класса
$method = $class->getMethod('Имя метода');   // Получаем метод по имени
$params = $method->getParameters();   // Получаем массив с параметрами
$paramName = $params[0]->getName();   // Берем первый элемент массива, он имеет тип ReflectionParameter, и получаем его имя.

Можно сразу создать объект для рефлексии метода "напрямую":
$method = new \ReflectionMethod('Класс', 'Имя метода');
// Далее, аналогично

С помощью рефлексии можно не только получать имена параметров, но и их типы, значения по умолчанию. Можно получать даже док-блоки для методов/свойств и тд. С помощью рефлексии, например, работает doctrine orm. Он использует аннотации (как один из вариантов конфигурации) для описания сущностей.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы