只有在满足条件的情况下,我才能访问许多路由。否则我就不能进入那些路线。
我想这应该用过滤器来完成,但我想我错过了一些关于它们如何工作的东西。
这就是我的过滤器:
Route::filter('my.filter', function()
{
//some code regarding said condition
if($mycondition==true){
//WHAT TO PUT HERE?
}else{
//Error message
}
}
在我的路线上,我会有:
Route::group(array('before' => 'my.filter'), function()
{
Route::resource('cities', 'CitiesController');
//... many more controllers here
});
但是我看到的所有例子都在if部分的过滤器中有一个重定向。我不想那样,我只想,如果过滤器中的条件为真,你可以看到那个url。
如果你想让你的过滤器停止进一步执行你的路线(和控制器等等),你必须:
- 返回某些内容(例如重定向)
- 或引发异常
在Laravel,你可以很容易地做到这一点:
Route::filter('my.filter', function()
{
//some code regarding said condition
if($mycondition==true){
// here you have to do nothing so you could also flip the if...
}else{
App::abort(403);
}
}
官方文件
小旁注:正如上面在评论中提到的,我会翻转if。比如:
Route::filter('my.filter', function()
{
//some code regarding said condition
if($mycondition==false){
App::abort(403);
}
}
您不必在那里放任何东西,只需让函数返回void即可。这将告诉laravel允许用户查看页面。您总是可以自己在那里放一个return
,让用户看到页面并跳过以下所有条件。
当不满足条件时,最好将用户重定向到一个页面,在该页面上解释用户无法看到该页面的原因。
Route::filter('my.filter', function()
{
//some code regarding said condition
if($mycondition==true){
return;
}else{
//Error message
}
}