无法从 RouteServiceProvider 或 routes.php 文件访问 Auth

Couldn't access Auth from RouteServiceProvider or routes.php file

这就是我要在 routes.php 文件中完成的工作

if(Auth::user()->isCompany()){
    $middleware = "auth.company";
    $namespace = 'Company';
} else {
    $middleware = "auth.admin";
    $namespace = null;  
}

Route::group(['prefix' => 'admin'], 'middleware' => $middleware , 'namespace' => $namespace , function(){
     Route::get('/','AdminController@getIndex');
     Route::get('users', 'UsersController@getIndex');
});

我想为每个用户角色使用相同的路由组,但会根据用户角色由不同命名空间下的不同控制器处理。

我不想把它放在同一个控制器上,因为它会用很多条件语句弄乱控制器。

这里的问题是我无法访问 Auth,我该怎么办?

Auth::user()null 因此导致此错误 Trying to get property of non-object

我目前已登录。如果我删除这段代码,我仍然登录。这是在使用 auth 中间件的路由组内

更新: 我试过@samrap 的答案。这是我的 routes.php 文件的样子。我仍然收到 Trying to get property of non-object 错误

<?php

Route::group(['middleware' => 'auth'], function()
{
    dd(\Auth::user()->id);
    // Insert the code above here ...
});
if ($user = \Auth::user() and $user->isCompany())

事实证明,我之前的回答似乎是错误的。在我提供的 link 中,该解决方案对用户有效,但对您无效。它也不适合我。通过调试,我得出的结论是,在注册路由时用户尚未通过身份验证。考虑到整个应用程序都依赖于路由,这是有道理的。您可以通过在 routes.php 文件中添加检查来验证此结论:

dd(\Auth::check());

无论用户是否登录,以上行都会 return false。此时在应用程序运行时,用户尚未从会话中注册。所以,你不能在路由文件中执行你想要的操作,在我看来这是一件好事。

那么,你能做些什么呢?

您可以创建自己的中间件来执行条件并根据这些条件调用适当的控制器。查看这些资源以帮助您:

http://laravel.com/docs/5.0/middleware http://laravel.io/forum/02-17-2015-laravel-5-routes-restricting-based-on-user-type