在Laravel 5中,我无法理解内部和外部函数(匿名函数)之类的参数的移动
Route::get('user/{id}', function ($id) {
return 'User '.$id;
});
参数如何移动..我真的需要知道$ id如何转到Route :: get函数..我的语法很难在没有copy n paste的情况下编写。
答案 0 :(得分:2)
这些论点并没有神奇地“移动”。执行此操作时,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')
然后使用reflection将回调中的参数与来自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
class。