Laravel 5委托一个路由-根据角色加载不同的控制器

Laravel 5 Entrust one route - load different controller based on Role

所以我才刚刚开始学习 Laravel 并且我已经实现了 Entrust Role Permission 包,它运行得非常好。现在我的问题是,我想要一个像这样的 'Dashboard' 页面:example.com/dashboard。

问题是,我不确定如何设置它。因为在我的 App\Http\Controllers 文件夹中,我为 Admin 和 User 创建了子文件夹,它们都有一个 Dashboardcontroller,因为我想为这两种类型的用户显示不同的数据。

我如何声明指向仪表板的路由并检查经过身份验证的用户具有哪个角色,然后加载正确的控制器?它必须对命名空间做些什么吗?我还没有真正找到好的答案

所以为了更清楚,我不想这样做: example.com/dashboard/admin 和 example.com/dashboard/user,而只是一个 url example.com/dashboard 并检查用户具有哪个角色。

如果答案真的很明显,我很抱歉,这些东西对我来说是新的,我还没有找到任何好的答案。

像这样的东西应该适合你。

routes.php

Route::get('/dashboard', ['as'=>'dashboard', 'uses'=> 'DashboardController@dashboard']);

DashboardController.php

use App\Http\Requests;
use App\Http\Controllers\Controller;

use App\User;
use App\Admin;

class DashboardController extends Controller {
    public function dashboard(){
        if ($this->auth->user()->hasRole('admin') )
        {
            return $this->showAdminDashboard();
        }
        elseif ($this->auth->user()->hasRole('user') )
        {
            return $this->showUserDashboard();
        }
        else {
            abort(403);
        }
    }

    private function showUserDashboard()
    {
        return view('dashboard.user');
    }

    private function showAdminDashboard()
    {
        return view('dashboard.admin');
    }
}

每条评论的编辑次数

听起来 this approach 可能就是您要找的东西。

<?php

$uses = 'PagesController@notfound';
if( $this->auth->user()->hasRole('admin') )
{
    $uses = 'AdminController@index';
}
elseif ($this->auth->user()->hasRole('user') )
{
    $uses = 'UsersController@index';
}


Route::get('/dashboard', array(
     'as'=>'home'
    ,'uses'=> $uses
));

也就是说,我觉得 DashboardController 效果更好。我发现在使用仪表板时,我会从各种模型中提取打开页面以获取有关该站点的统计信息。我只会将 DashboardController 用于此一般信息。在仪表板中,我想转到具有您想要的特定项目的其他页面 view/edit。这样,如果管理员需要访问 view/edit 与用户相同的信息,则无需重写代码。您可以只更新该特定控制器上的安全性以允许这两个组。