Laravel 在中间件中使用路由参数
Laravel use route parameter in middleware
找不到任何符合我的情况的内容。我有一个路由组定义为:
Route::group(['prefix' => 'api/v1/{access_token}'], function(){
...
}
上述组里面有几条资源路由。我正在尝试创建一个自定义中间件,它将验证 access_token
参数和 return 400 响应(如果参数无效)。我希望能够在我的控制器中做这样的事情:
class ProductController extends Controller {
/**
* Instantiate a new ProductController
*/
public function __construct()
{
$this->middleware('verifyAccessToken');
}
...
}
我的问题不是 "how do I define custom middleware",而是如何从 在 handle
函数中访问 access_token
参数我的自定义中间件?
编辑:虽然建议重复的问题很相似并且有答案,但这个答案似乎已经过时and/or对我想要完成的事情不满意。
http://laravel.com/docs/master/middleware#middleware-parameters
简单
public function yourmethod($access_token){
$this->middleware('verifyAccessToken', $access_token);
}
我认为你不能用 __construct()
方法做到这一点。
您可以使用神奇的 __get
方法从您的 $request
对象访问它:
public function handle($request, Closure $next)
{
$token = $request->access_token;
// Do something with $token
}
把中间件贴在Route::group
Route::group(['prefix' => 'api/v1/{access_token}', 'middleware' => 'verifyAccessToken'], function(){
});
然后在您的中间件中,正如 Thomas Kim 指出的那样,您可以使用 $request
对象来访问传递给路由的令牌。
public function handle($request, Closure $next)
{
$token = $request->access_token;
// Do something with $token
}
找不到任何符合我的情况的内容。我有一个路由组定义为:
Route::group(['prefix' => 'api/v1/{access_token}'], function(){
...
}
上述组里面有几条资源路由。我正在尝试创建一个自定义中间件,它将验证 access_token
参数和 return 400 响应(如果参数无效)。我希望能够在我的控制器中做这样的事情:
class ProductController extends Controller {
/**
* Instantiate a new ProductController
*/
public function __construct()
{
$this->middleware('verifyAccessToken');
}
...
}
我的问题不是 "how do I define custom middleware",而是如何从 在 handle
函数中访问 access_token
参数我的自定义中间件?
编辑:虽然建议重复的问题很相似并且有答案,但这个答案似乎已经过时and/or对我想要完成的事情不满意。
http://laravel.com/docs/master/middleware#middleware-parameters
简单
public function yourmethod($access_token){
$this->middleware('verifyAccessToken', $access_token);
}
我认为你不能用 __construct()
方法做到这一点。
您可以使用神奇的 __get
方法从您的 $request
对象访问它:
public function handle($request, Closure $next)
{
$token = $request->access_token;
// Do something with $token
}
把中间件贴在Route::group
Route::group(['prefix' => 'api/v1/{access_token}', 'middleware' => 'verifyAccessToken'], function(){
});
然后在您的中间件中,正如 Thomas Kim 指出的那样,您可以使用 $request
对象来访问传递给路由的令牌。
public function handle($request, Closure $next)
{
$token = $request->access_token;
// Do something with $token
}