我想从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类的启动方法添加过滤器。但是怎么样?你能帮帮我吗?
答案 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);
}