如何将laravel 4过滤器迁移并转换为laravel 5?

时间:2017-02-05 11:27:58

标签: laravel laravel-5 laravel-4

我想从laravel 4迁移到laravel 5,似乎过滤器概念已在laravel 5中更改。

我在app / filters.php文件中有以下过滤器(以及auth,guest,csrf过滤器):

Route::filter('date_validation', function ($route, $request) {
    $parameters = $route->parameters();
    if(array_key_exists('date', $parameters)) {
        $date = $parameters["date"];            

        if(strtotime($date) > time() || strtotime($date) < strtotime('2014-01-01')) {
            return Redirect::to('/');
        }

    }

    if(array_key_exists('time', $parameters)) {
        $time = $parameters["time"];

        if($time > '23-59') {
            return Redirect::to('/den');
        }
    }

});

我使用这个过滤器在routes.php文件中定义了一些路由:

Route::group(array('before' => 'date_validation'), function() {
    // some routes.
});

但现在,我发现我应该使用中间件。我想我应该为App \ Providers \ RouteServiceProviders类的启动方法添加过滤器。但是怎么样?你能帮帮我吗?

1 个答案:

答案 0 :(得分:2)

你应该看看Middleware

创建中间件: php artisan make:middleware DateValidation

将其添加到内核:

// Within App\Http\Kernel Class...

protected $routeMiddleware = [
    //...
    'date_validation' => \App\Http\Middleware\DateValidation::class,
];

在您的中间件中,您可以执行以下操作:

public function handle($request, Closure $next)
 {
    $parameters = $request->route()->parameters();
    if(array_key_exists('date', $parameters)) {
       $date = $parameters["date"];            

        if(strtotime($date) > time() || strtotime($date) < strtotime('2014-01-01')) {
          return Redirect::to('/');
        }

    }

    if(array_key_exists('time', $parameters)) {
        $time = $parameters["time"];

        if($time > '23-59') {
            return Redirect::to('/den');
        }
    }

    return $next($request);
}