2015-05-29 71 views
0

我不知道laravel发生了什么事,laravel生成无效路由时,当我执行某些操作时,像我打开评论框点击按钮评论模式框打开罚款,但是当我看到铬开发人员选项 - >网络显示我很多无效的路线。任何想法为什么发生这种情况?Laravel生成无效路线

请参阅附件screnshot:

Admin是我的路由前缀

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\[email protected]']); 
}); 
Route::post('user/login', ['as' => 'user.post.login', 'uses' => 'Auth\[email protected]']); 
Route::get('user/logout', ['as' => 'user.logout', 'uses' => 'Auth\[email protected]']); 
+0

你可以用pastebin发布你的allow_only_admin中间件吗? – ChainList

+0

这不是无效的路线。你正在重定向几乎所有的请求。 – itachi

+0

你做错了 - > http://en.wikipedia.org/wiki/HTTP_301 –

回答

0

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

应用程序\ 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: 路线::组([ '中间件'=> '管理员'],函数(){... 管理路由...

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

你不需要路由过滤器,全部删除它们。使用路由组,所以管理员路线都在此声明:

routes.php文件

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

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

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

您不需要那个no_auth过滤器,只需将其删除即可。

+0

像这样在内核中添加保护$ routeMiddleware = [ 'admin'= >'App \ Http \ Middleware \ Admin', ];但在Container.php中出现错误:ReflectionException 776: 类管理不存在 –

+0

Admin.php中的FatalErrorException第6行: 无法重新声明类App \ Http \ Middleware \ Admin –

+0

您是否在“Http /中间件'文件夹?在'kernel.php'中,您将中间件名称映射到中间件文件,因此如果将该文件映射到'admin',则仅将控制器中间件设置为该nam。我会添加更多的代码。 – hfingler