2015-08-07 13 views
8

laravel 5,1 deprecates Route::filter() i innych pokrewnych funkcji, claiming in the docs that:

filtry trasy zostały przestarzałe w preferencji middleware.

Ale jeśli filtr trasa dostęp parametry trasy, w jaki sposób można zastąpić ten z warstwy pośredniej, ponieważ $request->route() jest null w middleware?

Route::filter('foo', function($route, $request) { 
    if ($route->parameter('bar') > 1000) { 
     return Redirect::route('large-bars'); 
    } 
}); 

Najbliżej widzę coś takiego jak

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); 
    } 
} 

ale to jest oczywiście o wiele bardziej kruche niż odnoszące się do parametru o nazwie. Czego tu mi brakuje? Dzięki!

+0

Głosowanie chciałoby poznać odpowiedź –

Odpowiedz

10

$request->route() jest tylko null dla globalnego oprogramowania pośredniego zarejestrowanego pod numerem App\Http\Kernel::$middleware. Aby mieć dostęp do aktualnej trasy, zamiast tego należy zarejestrować swój middleware w Kernel::$routeMiddleware:

protected $routeMiddleware = [ 
    ..., 
    'foo' => FooMiddleware::class, 
]; 

Proposals to change this behavior have been rejected by the Laravel maintainers powodu obaw architektonicznych.

Powiązane problemy