【问题标题】:Using the same route for different types of users in Laravel在 Laravel 中为不同类型的用户使用相同的路由
【发布时间】:2016-11-24 22:53:01
【问题描述】:

我的应用程序将包含医生、患者和管理员

现在我想为所有角色设置相同的路线。如下:

app.com/dashboard/
app.com/dashboard/appointments

但我想为患者使用不同的控制器,以及为医生使用的控制器。我尝试了以下但没有成功

Route::group(['prefix' => 'dashboard', 'middleware' => ['auth']], function () {

/* Doctor */
Route::group(['middleware' => ['role:doctor']], function() {
    Route::get('/appointments', 'Doctor\AppointmentController@index');
});

/* Patient */
Route::group(['middleware' => ['role:patient']], function() {
    Route::get('/appointments', 'Patient\AppointmentController@index');
});

});

我收到由我的角色中间件导致的 403(未经授权)错误。即使没有,我认为它只是覆盖另一个?

有没有人能够将相同的路线(/dashboard)用于完全不同的目的?又名不同的控制器/视图

谢谢!

【问题讨论】:

  • 我不是 100% 确定,所以我不想将其添加为答案,但我认为最简单且可以说是最易读的解决方案是创建一个接受任一角色的通用中间件,以及一个通用的 AppointmentController,其目的仅在于根据当前用户的角色定向到正确的控制器。
  • 控制器重定向到另一个控制器似乎并不完全好,但您的回答是有道理的!奇怪了,实现起来这么难
  • 我会与@Notflip 争论。在整个地方来回重定向控制器方法并不是很好。在这种情况下,尽管拥有一个单独的仪表板控制器实际上可能非常好,该控制器根据角色将委托/代理到每个完全独立的控制器。我想这就是我在这种情况下会做的。

标签: php laravel


【解决方案1】:

您可以通过检查用户角色来解决此问题,然后相应地调用控制器函数:

Route::get('appointment', function()
{
    if (auth()->user()->isDoctor())
    {
        app()->call('Doctor\AppointmentController@index')
    }
    elseif(auth()->user()->isPatient())
    {
        app()->call('Patient\AppointmentController@index')
    }
});

【讨论】:

    猜你喜欢
    • 2018-08-20
    • 2021-02-28
    • 2018-10-20
    • 2016-03-03
    • 2020-10-20
    • 2015-08-18
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    相关资源
    最近更新 更多