Поток аргументов Laravel и анонимных функций

В Laravel 5 я не могу понять движение аргументов внутри и снаружи функций (анонимных функций), подобных этой

Route::get('user/{id}', function ($id) {
return 'User '.$id;
});

Как перемещаются аргументы … Мне действительно нужно знать, как $ id попадает в Route :: get functions .. Мне очень сложно написать синтаксис без копирования и вставки.

0

Решение

Аргументы не волшебным образом «двигаются». Когда вы делаете это, Laravel берет комбинацию пути / функции и сохраняет их для дальнейшего использования. Это упрощенная версия того, что происходит:

class Route
{
private static $GET = array();

public static function get($path, $callback)
{
self::$GET[] = array($path, $callback);
}
}

Затем, после добавления всех маршрутов, он проверяет, с какого URL была вызвана веб-страница, и находит соответствующий ему путь. Существует некоторая внутренняя процедура, которая принимает $path для каждого маршрута и преобразует его в регулярное выражение, как #user/(?P<id>.+)#так что сопоставление только что сделано с чем-то вроде preg_match(), После успешного попадания он останавливается и извлекает переменные:

'/user/foobar' has the username extracted: array('id' => 'foobar')

Затем он использует отражение сопоставить параметры в обратном вызове с данными из URL.

$callback_reflection = new ReflectionFunction($callback);
$arguments = $callback_reflection->getParameters();
/* some algorithm to match the data and store in $args */
$result = $callback_reflection->invokeArgs($args);

invokeArgs() Метод — это то, что будет выполнять ваш обратный вызов с правильными аргументами. Здесь не так много магии. Увидеть Router учебный класс Больше подробностей.

2

Другие решения

Других решений пока нет …