对两个以外的所有路线应用过滤器?

时间:2014-03-08 04:15:20

标签: laravel laravel-4

有没有办法可以将过滤器(特别是“auth”)应用到除“login”和“sessions.store”之外的所有路径

pattern based filters上有一小段,但我不知道如何否定它们。

像ASP.NET MVC的AllowAnonymous之类的东西会很好。

2 个答案:

答案 0 :(得分:3)

是的 - 只需像这样使用route groups

<强> routes.php文件

// Not logged in area
Route::get('/login', ['as' => 'login', 'uses' => 'AuthController@getLogin']);
Route::get('/session', ['as' => 'session.store', 'uses' => 'AuthController@sessionStore']);


// Logged in area
Route::group(['before' => 'auth'], function ()
{
     Route::get('/dashboard', ['as' => 'dashboard', 'uses' => 'DashboardController@index']);
     // Rest of your routes here
}

或者还有其他一些选择。你可以创建一个class based filter,然后做这样的事情(半pseducode,我还没有测试过,但是你明白了

class AdminFilter {

      public function filter()
      {
         if ( ! ((Route::getCurrentRoute() == 'login') || Route::getCurrentRoute() == 'session.store')))
         {
             // If the route is not login or session.store, then run the auth check
             if (Auth::guest()) return Redirect::guest('login');
         }  

         return true;
      }
 }

编辑:将您的请求用于AllowAnonymous之类的内容 - 您也可以执行like this in your base Controller

public function __construct()
    {
        $this->beforeFilter('auth', array('except' => array('login', 'sessions.store')));
    }

然后所有控制器都“扩展”基本控制器。这意味着所有路径(使用控制器)都会自动应用auth过滤器。

答案 1 :(得分:2)

app/filters.php文件中,有一个过滤器附带了库存laravel:

App::before(function($request)
{

});

您可以使用它来检查您的某些页面,如果一切正常,请将其通过,如果没有,则重定向到登录。