跟我学Laravel之路由(2)
路由过滤器提供了非常方便的方法来限制对应用程序中某些功能访问,例如对于需要验证才能访问的功能就非常有用。Laravel框架自身已经提供了一些过滤器,包括 auth过滤器、auth.basic过滤器、guest过滤器以及csrf过滤器。这些过滤器都定义在app/filter.php文件中。
定义一个路由过滤器
Route::filter('old', function()
{
if (Input::get('age') < 200)
{
return Redirect::to('home');
}
});
如果从路由过滤器中返回了一个response,那么该response将被认为对应的是此次request,路由将不会被执行,并且,此路由中所有定义在此过滤器之后的代码也都不会被执行。
为路由绑定过滤器
Route::get('user', array('before' => 'old', function()
{
return 'You are over 200 years old!';
}));
将过滤器绑定为控制器Action
为路由绑定多个过滤器
Route::get('user', array('before' => 'auth|old', function()
{
return 'You are authenticated and over 200 years old!';
}));
指定过滤器参数
Route::filter('age', function($route, $request, $value)
{
//
});
Route::get('user', array('before' => 'age:200', function()
{
return 'Hello World';
}));
所有其后的过滤器将接收到 $response作为第三个参数:
Route::filter('log', function($route, $request, $response, $value)
{
//
});
基于模式的过滤器
你也可以指针对URI为一组路由指定过滤器。
Route::filter('admin', function()
{
//
});
Route::when('admin/*', 'admin');
上述案例中,admin过滤器将会应用到所有以admin/开头的路由中。星号是通配符,将会匹配任意多个字符的组合。
还可以针对HTTP动作限定模式过滤器:
Route::when('admin/*', 'admin', array('post'));
过滤器类
过滤器的高级用法中,还可以使用类来替代闭包函数。由于过滤器类是通过IoC container实现解析的,所有,你可以在这些过滤器中利用依赖注入(dependency injection)的方法实现更好的测试能力。
定义一个过滤器类
class FooFilter {
public function filter()
{
// Filter logic...
}
}
注册过滤器类