filter在Laravel 5

我们如何在Laravel 5中制作filter? filter的想法是走了吗?

简短的答案是否定的, 路由filter不会完全在Laravel 5.0中消失 (尽pipe有一些关于这个的误导信息)。 如果您愿意,该function仍然可以让您在路线上使用“之前”和“之后”filter。 不再提供“filters.php”文件,但是你仍然可以在其他地方定义你的filter,可能是在Providers / RouteServiceProvider.php的boot()函数中最恰当的。

但是 ,中间件现在是实现相同function的首选方式。 有关如何使用它的信息,请参阅http://laravel.com/docs/master/middleware

中间件可以被实现为像“之前”或“之后”filter一样的行为。 它可以应用于所有路由(称为“全球中间件”),或者分配给特定的路由(例如,在您的routes.php文件中为路由定义添加“'middleware'=>'auth'”)。

中间件唯一的重要限制是它目前不给你一个传递参数的方法 (就像你可以使用filter一样)。 这意味着你不能像“requirePermission:admin”那样做一些事情。 目前有两种方法来处理这个限制。 您可以改为使用路由filter,就像使用“拉威尔”4.2一样。 否则,如果您更喜欢使用中间件,这感觉就像是一个黑客,但您可以通过定义和检索添加到您的路由定义的自定义值传递参数到中间件,如http://blog.elliothesp.co.uk / coding / passing-parameters-middleware-laravel-5 / 。

2015-05-29更新:从Laravel 5.1开始,可以使用中间件参数 。

2015-06-10更新:路由filter已被弃用,优先于中间件,将于2015年12月发布Laravel 5.2。

  1. 创build一个中间件

    php artisan make:middleware class_name 
  2. 在您的应用程序/ Providers / RouteServiceProvider.php中创build一个快捷键:

     protected $middleware = [ // .... 'shortName' => 'App\Http\Middleware\class_name', ]; 
  3. 您现在可以将其启用到任何路由(就像L4filter一样):

     $router->post('url', ['middleware' => 'shortName', function() { ... }]); 

中间件似乎正在取代Laravel的filter。 至于你的问题。 正确的答案是中间件 。 把它想成层。

对于更详细的答案检查了这一点 。

老答案

快速search显示requests是新的validation方式。 但是我不确定你的用例是否适用于此。

Laravel 5介绍了“请求”的概念。 这是包装逻辑,你会作为HTTP请求的一部分执行,但不仅仅是一个路由filter。 主要候选人:数据validation。

进行预validation(过滤)的一种方法是使用方法authorize()

 <?php namespace App\Http\Requests\Auth; use Illuminate\Foundation\Http\FormRequest; class RegisterRequest extends FormRequest { public function rules() { return [ 'email' => 'required|email|unique:users', 'password' => 'required|confirmed|min:8', ]; } public function authorize() { return true; } } 

有一个rules()方法可以返回在传递给Validator :: make()之前的一系列规则,也可以提供任何用户授权的authorize()方法。 通常你希望所有用户都能够注册,所以你只需简单的返回true。

取自Laravel的新function5

关于之前/之后的评论。

从上面的链接 :

在中间件

 #Before public function handle($request, Closure $next) { //Do stuff return $request; } #After public function handle($request, Closure $next) { $response = $next($request); // Do stuff {on $response} return $response; } 

使用['middleware' => 'shortName']应该相应地对待它。

filters.php已被删除,并由routes.php旁边的Kernel.php取代

 protected $routeMiddleware = [ 'auth' => 'App\Http\Middleware\Authenticate', 'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth', 'guest' => 'App\Http\Middleware\RedirectIfAuthenticated', ]; 

但是你不能直接直接添加你的过滤代码,你应该先创build一个Middleware类(app / Http / Middleware)然后在Kernel.php文件中添加你想要的密钥并引用它自己的Middleware类,比如:

 'product.check' => 'App\Http\Middleware\ProductChecker' 

是的,中间件是来自Laravel 5.0文档的正确位置:

HTTP中间件提供了一种便捷的机制来过滤进入应用程序的HTTP请求。

我个人认为增加一个中间件是一个很好的做法,但是如果你碰巧需要一个控制器的快速小filter,rubyonrails风格,

做如下:

 class myController{ //filters public function myFilter() { //my filter's logic } public function __construct() { $this->myFilter(); //middlewares or any other code } } 

现在laravel 5已经推出了中间件,而不是filter,它出现在laravel 4中。我会build议你关注laravel 5 官方文档 。