我有2 Route::group
,每个人都有routes
两个。例如:
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>
如果您查看第二个访客菜单,您会看到错过了menu for Restoring password
。是的,我希望有时候不显示一些菜单。
基本上,我有两个问题:
答案 0 :(得分:3)
路由组是暂时的,它们唯一的用途是允许路由器批量填充其中路由的特定属性(前缀,名称空间等)。
注册组时,传递给它的属性将添加到组内定义的路由中,然后删除该组。因此,只有在执行-Dhttp.port=8888
方法时,该组才存在于路由器中。
这意味着你不能在路由闭包或控制器方法中获取任何组信息,以便获取路径。
由于您说您有3种类型的用户,因此您应该有办法获取经过身份验证的用户的用户类型,例如Route::group
(将返回其中一个值{{1} },Auth::user()->type
,admin
)。此外,您应该能够使用instructor
来确定用户是否未登录。
因此,您可以执行以下操作来处理菜单生成(下面的代码假定student
变量包含Auth::guest()
中的模型):
$user
答案 1 :(得分:1)
我在别名中为我想要隐藏的一些路线添加了“@”。
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@hide', 'uses' => 'WelcomeController@restore']);
});
然后在视图中我添加了这段代码:
foreach( Route::getRoutes() as $route){
$data = explode('@', $route->getName());
if(Route::getCurrentRoute()->getPrefix() == $route->getPrefix() && @$data[1] == "" ){
echo '<li><a href="'.$route->getPath() .'">'.$data[0].'</a></li>';
}
}
现在,我成功显示了当前route::group
的所有路由器,并隐藏了一些将@
添加到别名的路由。例如,它是Restore the password@hide