过滤器在Laravel 5中

Jos*_*vid 44 laravel laravel-5 laravel-filters

我们如何在Laravel 5中制作滤镜?过滤器的想法会消失吗?

orr*_*rrd 58

简短的回答是否定的,路由过滤器并没有完全消失在Laravel 5.0中(尽管有一些误导性的信息).如果您愿意,还可以使用功能让您在路线上使用"之前"和"之后"过滤器.不再提供"filters.php"文件,但您仍可以在其他位置定义过滤器,可能最适合在Providers/RouteServiceProvider.php的boot()函数中.

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

中间件可以实现为"前"或"后"过滤器.它可以应用于所有路由(称为"全局中间件"),或分配给特定路由(例如,将"'middleware'=>'auth'"添加到routes.php文件中的路由定义中.

中间件的唯一重要限制是它目前没有为您提供传递参数的方法(就像使用过滤器一样).这意味着您无法执行"requirePermission:admin"之类的操作.目前有两种方法来处理这种限制.您可以改为使用路由过滤器,就像使用Larvel 4.2一样.或者,如果您更喜欢使用中间件,这感觉就像是一个黑客,但您可以通过定义和检索添加到路由定义中的自定义值将参数传递给中间件,如http://blog.elliothesp.co.uk中所述./coding/passing-parameters-middleware-laravel-5 /.

2015-05-29更新: 从Laravel 5.1开始提供中间件参数.

2015-06-10更新:路由过滤器已被弃用,优先于中间件,并将在2015年12月发布Laravel 5.2时完全删除.


iga*_*ter 12

  1. 用.创建中间件

    php artisan make:middleware class_name
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在app/Providers/RouteServiceProvider.php中创建一个简写键:

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

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

  • 之前和之后呢? (6认同)
  • @Lloople Laravel 5将过滤器合并到单个中间件之前/之后,阅读[中间件上的Laravel 5文档](http://laravel.com/docs/5.0/middleware#defining-middleware). (2认同)

maj*_*rif 9

似乎中间件正在替换Laravel的过滤器.至于你的问题.正确的答案是Middlewares.把它想象成层.

有关更详细的答案,请查看此信息.

老答案

快速搜索显示requests是验证的新方法.但我不确定您的用例是否适用于此.

Laravel 5引入了"请求"的概念.这包含了您将作为HTTP请求的一部分执行的逻辑,但不仅仅是路由过滤器.主要候选人:数据验证.

进行预验证(过滤)的一种方法是使用该方法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;
    }

}
Run Code Online (Sandbox Code Playgroud)

有一个rules()方法可以在传递给Validator :: make()之前返回一个规则数组,还有一个authorize()方法,您可以在其中提供任何用户授权.通常您希望所有用户都能够注册,因此您只需返回true即可.

取自Laravel 5中的新功能


小智 7

对于之前/之后的评论.

从上面的链接:

在中间件..

#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;
}
Run Code Online (Sandbox Code Playgroud)

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