Laravel生成无效路线

时间:2015-05-29 12:41:34

标签: laravel routes laravel-5

我不知道laravel发生了什么,laravel在我执行某些动作时生成无效路线,例如当我打开评论框点击按钮评论模式框打开罚款时,但是当我在chrome开发者选项中看到 - >网络它显示了许多无效的路线。知道为什么会这样吗?

请参阅随附的screnshot:

管理员是我的路线前缀

enter image description here

Route::group(['prefix' => 'admin', 'before' => 'allow_only_admin'], function () {
});

http://projecturl.com/admin/order/

Route::filter('allow_only_admin', function () {
    if (Auth::check() && !Auth::user()->is('admin')) {
        return redirect()->intended('user/login');

    } else {

    }
});

这是我的ABC中间件:

class Abc {

    public function handle($request, Closure $next) {
        if (\Auth::check() && \Auth::user()->admin) {
            return $next($request);
        }
        return redirect()->route('user.login');
    }
}

这是我的No_​​auth过滤器:检查用户登录并重定向到用户角色

Route::filter('no_auth', function () {
    if (Auth::check()) {
        if (Auth::user()->is('admin')) {
            return Redirect::route('orders.all');
        }

        if (Auth::user()->is('writer')) {
            return Redirect::route('windex');
        }

        if (Auth::user()->is('teamlead')) {
            return Redirect::route('tlindex');
        }
    }
});

,这是登录路线:

Route::group(['prefix' => 'user', 'before' => 'no_auth'], function () {
    Route::get('login', ['as' => 'user.login', 'uses' => 'Auth\AuthController@showLoginForm']);
});
Route::post('user/login', ['as' => 'user.post.login', 'uses' => 'Auth\AuthController@postLogin']);
Route::get('user/logout', ['as' => 'user.logout', 'uses' => 'Auth\AuthController@getLogout']);

1 个答案:

答案 0 :(得分:0)

您的middlware可能无限期地与这些重定向循环。我尝试重定向一次然后发生了这种情况。我建议重新组织你的管理中间件,这是我使用的:

应用\ HTTP \中间件\ admin.php的:

<?php namespace App\Http\Middleware;

use Closure;

class Admin {

    public function handle($request, Closure $next)
    {
        if (\Auth::check() && \Auth::user()->admin) {
            return $next($request);
        }
       return redirect()->route('some.route');
    }
}

应用/ HTTP / Kernel.php

protected $routeMiddleware = [
    ...
    'admin' => 'App\Http\Middleware\Admin',
];

将其设置为中间件:在Kernel.php添加'admin' => 'App\Http\Middleware\Admin',,然后在routes.php中:     Route :: group(['middleware'=&gt;'admin'],function(){        ...管理员路线...

编辑:  添加更多代码后,这里有一些提示,也许它们可以帮助您解决问题。

您不需要路由过滤器,将它们全部删除。使用路由组,因此管理路由在此语句中:

routes.php文件

Route::group(['middleware' => 'admin', 'prefix' => 'admin'], function() {
   ... admin routes
}

不要忘记在Kernel.php中使用正确的名称注册管理中间件(在我的示例中为admin)。

要将用户重定向到他们自己的区域,请尝试将逻辑放在Auth\AuthController@postLogin中的后登录路由中。在那里,您将检查凭据是否正确(Auth :: attempt),如果是,请使if else将用户重定向到正确的位置。

您不需要no_auth过滤器,只需删除它即可。