2015-08-07 13 views
8

laravel 5.1 depreca Route::filter() e altre funzioni correlate, claiming in the docs that:

filtri del percorso sono stati deprecati a preferenza di middleware.

Ma se il vostro filtro di route accede parametri del percorso, come si può sostituire questo con middleware, dal momento che il $request->route() è null nel middleware?

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

Il più vicino che posso vedere è qualcosa di simile a

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

ma questo è ovviamente molto più fragile di quanto si riferisce al parametro in base al nome. Cosa mi manca qui? Grazie!

+0

Voto su vorrei sapere la risposta –

risposta

10

$request->route() è nullo solo per il middleware globale registrato in App\Http\Kernel::$middleware. Per avere accesso al percorso corrente, invece è necessario registrare il middleware in Kernel::$routeMiddleware:

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

Proposals to change this behavior have been rejected by the Laravel maintainers a causa di problemi architettonici.

Problemi correlati