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

How to create a filter for a domain in Laravel

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

这是我目前在 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... */ });

}

然后进入过滤函数,成功检查条件,但仍然没有发生重定向。

我想我在这里遗漏了不止一个关键点。想法?

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

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')) {