Zoo*_*oon 4 laravel laravel-routing lumen lumen-routing lumen-5.4
$request->route('id')
在最新版本的Lumen中尝试使用来访问Route参数时,出现错误。
lumen.ERROR: Symfony\Component\Debug\Exception\FatalThrowableError:
Call to a member function parameter() on array
Run Code Online (Sandbox Code Playgroud)
它在Laravel中可以正常工作。
流明被简化,以至于Route解析为一个简单的数组,而不是Route对象。
这是一个问题,因为该Request::route($key)
方法假定Route将具有一个parameter
方法。
但是,如果调用Request::route(null)
,将返回完整的Route数组,如下所示:
array(3) {
[0]=>
int(1)
[1]=>
array(2) {
["uses"]=>
string(40) "App\Http\Controllers\SomeController@index"
["middleware"]=>
array(2) {
[0]=>
string(4) "auth"
[1]=>
string(4) "example"
}
}
[2]=>
array(1) {
["id"]=>
string(36) "32bd15fe-fec8-11e7-ac6b-e0accb7a6476"
}
}
Run Code Online (Sandbox Code Playgroud)
哪里[2]
似乎总是包含Route参数。
我制作了一个简单的辅助程序类,以在Lumen上使用Route参数。您可以获取,设置和忘记路由参数。如果您需要在中间件中进行操作,那么这非常有用。
保存在app/Support/RouteParam.php
:https : //gist.github.com/westphalen/c3cd187007e0448bcb7fca1de091e4df
并像这样简单地使用它: $id = RouteParam::get($request, 'id');
责备illuminate/http/Request.php
:
/**
* Get the route handling the request.
*
* @param string|null $param
*
* @return \Illuminate\Routing\Route|object|string
*/
public function route($param = null)
{
$route = call_user_func($this->getRouteResolver());
if (is_null($route) || is_null($param)) {
return $route;
}
return $route->parameter($param); // can't call parameter on array.
}
Run Code Online (Sandbox Code Playgroud)