laravel - Laravel 5 中通过 Route::group 构建菜单

标签 laravel laravel-5

我有 2 个 Route::group,每个都有几条 路线。例如:

Route::group(['prefix'=>'/guest', 'middleware'=>'guest'], function()
{
    Route::get('login', ['as' => 'Login to the site', 'uses' => 'WelcomeController@login']);
    Route::get('register', ['as' => 'Register', 'uses' => 'WelcomeController@register']);
    Route::get('restore', ['as' => 'Restore the password', 'uses' => 'WelcomeController@restore']);
});


Route::group(['prefix'=>'/admin', 'middleware'=>'auth', function()
{
    Route::get('/dashboard', ['as' => 'Home Page', 'uses' => 'AdminController@users']);
    Route::get('/users', ['as' => 'Users', 'uses' => 'AdminController@users']);
});

所以,我想使用当前前缀 Route::group 自动构建一个菜单。如果用户通过身份验证,Laravel 应显示如下菜单列表:

<li><a href="/admin/dashboard">Home Page</a></li>
<li><a href="/admin/users">Users</a></li>

但是如果用户只是访客,在这种情况下我的菜单应该是这样的:

<li><a href="/guest/login">Login to the site</a></li>
<li><a href="/guest/register">Register</a></li>

如果您查看第二个访客菜单,您会发现缺少恢复密码菜单。是的,我希望有时不显示某些菜单。

基本上,我有两个问题:

  1. 查找属于当前路由组的路由并构建 菜单。
  2. 不在菜单中显示任何路线,而是为其添加一些选项。

最佳答案

路由组是暂时的,它们的唯一用途是允许路由器批量填充其中路由的特定属性(前缀、命名空间等)。

当您注册一个组时,您传递给它的属性将添加到该组内定义的路由中,然后该组将被删除。因此,仅当执行 Route::group 方法时,该组才存在于路由器中。

所有这意味着您无法在路线闭包或 Controller 方法中获取任何组信息,以便获取内部路线。


既然你说你有 3 种类型的用户,那么你可能应该有一种方法来获取经过身份验证的用户的用户类型,例如 Auth::user()->type (它将返回以下值之一:admininstructorstudent)。此外,您应该能够使用 Auth::guest() 来确定用户是否未登录。

因此,您可以执行以下操作来处理菜单生成(下面的代码假设 $user 变量包含来自 Auth::user() 的模型):

<ul>
    @if (Auth::guest())
        <li><a href="/guest/login">Login to the site</a></li>
        <li><a href="/guest/register">Register</a></li>
    @else
        @if ($user->type == 'admin')
            <li><a href="/admin/dashboard">Home Page</a></li>
            <li><a href="/admin/users">Users</a></li>
            ...
       @elseif ($user->type == 'instructor')
            <li><a href="/instructor/dashboard">Home Page</a></li>
            <li><a href="/instructor/students">Students</a></li>
            ...
       @elseif ($user->type == 'student')
            <li><a href="/student/dashboard">Home Page</a></li>
            <li><a href="/student/lessons">Lessons</a></li>
            ...
       @endif
    @endif
</ul>

关于laravel - Laravel 5 中通过 Route::group 构建菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33787164/

相关文章:

parameters - 在 Laravel 中访问 $_GET 值的最佳实践是什么?

PhpStorm 无法识别 Php 文件

php - 仅在实时服务器上 VerifyCsrfToken.php 第 67 行中的 TokenMismatchException

php - Laravel 5.7 登录和注册页面无法正常工作 : refreshing the appropriate pages

php - 了解 laravel 'auth' 和 'web' 中间件

laravel - Laravel 4 中检索特定日期范围内数据记录的查询

php - 在 Eloquent 关系 laravel 中转换查询

php - 检查用户是否在线 laravel

php - 通过限定名称与::class 引用 Laravel 模型

sql - 测试后 Laravel 重置数据库