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

how to migrate and transform laravel 4 filters to laravel 5?

我想从 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 class 的引导方法中添加过滤器。但是怎么办?你能帮帮我吗?

你应该看看 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);
}