我有 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>
如果您查看第二个访客菜单,您会发现缺少恢复密码菜单
。是的,我希望有时不显示某些菜单。
基本上,我有两个问题:
- 查找属于当前路由组的路由并构建 菜单。
- 不在菜单中显示任何路线,而是为其添加一些选项。
最佳答案
路由组是暂时的,它们的唯一用途是允许路由器批量填充其中路由的特定属性(前缀、命名空间等)。
当您注册一个组时,您传递给它的属性将添加到该组内定义的路由中,然后该组将被删除。因此,仅当执行 Route::group
方法时,该组才存在于路由器中。
所有这意味着您无法在路线闭包或 Controller 方法中获取任何组信息,以便获取内部路线。
既然你说你有 3 种类型的用户,那么你可能应该有一种方法来获取经过身份验证的用户的用户类型,例如 Auth::user()->type
(它将返回以下值之一:admin
、instructor
、student
)。此外,您应该能够使用 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/