在流明中获取路线参数

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中可以正常工作。

Zoo*_*oon 9

流明被简化,以至于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.phphttps : //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)