Laravel 5.1弃用Route::filter()和其他相关功能,在文档中声称:
路由过滤器已被弃用,而不是中间件.
但是如果您的路由过滤器访问路由参数,那么如何用中间件替换它,因为它$request->route()是null在中间件中?
Route::filter('foo', function($route, $request) {
if ($route->parameter('bar') > 1000) {
return Redirect::route('large-bars');
}
});
Run Code Online (Sandbox Code Playgroud)
我能看到的最接近的是
class FooMiddleware {
public function handle($request, Closure $next)
{
// Note that $request->route() is null here, as the request
// hasn't been handled by Laravel yet.
if ($request->segment(4) > 1000) { // ewww...
return Redirect::route('large-bars');
}
return $next($request);
}
}
Run Code Online (Sandbox Code Playgroud)
但这显然比按名称引用参数要脆弱得多.我在这里错过了什么?谢谢!
Ben*_*aar 21
$request->route()对于注册的全局中间件仅为null App\Http\Kernel::$middleware.要访问当前路由,您必须在Kernel::$routeMiddleware以下位置注册中间件:
protected $routeMiddleware = [
...,
'foo' => FooMiddleware::class,
];
Run Code Online (Sandbox Code Playgroud)
由于架构问题,Laravel维护者拒绝了改变这种行为的建议.
| 归档时间: |
|
| 查看次数: |
2756 次 |
| 最近记录: |