如何在Laravel中为域创建过滤器

时间:2015-02-11 03:04:51

标签: laravel laravel-4 laravel-routing

我正在尝试创建适用于特定域的过滤器,并在用户超过配额时从他们尝试访问的任何页面重定向用户。到目前为止,代码根本没有重定向。

以下是我目前在filters.php中的内容:

Route::filter('domain', function () {
    if (stripos(Request::root(), Config::get('domains.main')) !== false) {
        if (Auth::check()) {
            $user = Auth::user();

            $max_quota = Plan::where('id', $user->plan_id)->where('is_active', true)->pluck('max_quota');

            $quota_used = Quota::where('user_id', $user->id)->count();

            if (empty($max_quota)) {
                return Redirect::to('account/error/inactive');
            } elseif ($quota_used >= $max_quota) {
                return Redirect::to('account/error/over_quota');
            }
        }
    }
});

即使我将其放在routes.php下:

Route::group(['domain' => Config::get('domains.main')], function () {

    Route::filter('*', function () { /* Same code here... */ });

}

然后它将进入过滤器功能,成功检查标准,但重定向仍然不会发生。

我想我在这里缺少一个以上的关键点。想法?

1 个答案:

答案 0 :(得分:0)

为了完成这项工作,我需要改变:

Route::group(['domain' => Config::get('domains.main')], function () {

要:

Route::group(['domain' => Config::get('domains.main'), 'before' => 'domain'], function () {

我还需要为此行添加重定向循环保护:

if (Auth::check()) {

这样就变成了:

if (Auth::check() && !strpos(Request::fullUrl(), 'account/error')) {