在视图中获取路由名称

8

我正在尝试设计导航菜单,有3个如下的选项:

  • 仪表盘
  • 页面
    • 列表
    • 添加
  • 文章
    • 列表
    • 添加

现在我想在用户进入此部分时加粗 页面

如果在 添加 页面中,我想同时加粗 页面添加

我的 routes.php 如下:

Route::group(array('prefix' => 'admin', 'before' => 'auth.admin'), function()
{
    Route::any('/', 'App\Controllers\Admin\PagesController@index');
    Route::resource('articles', 'App\Controllers\Admin\ArticlesController');
    Route::resource('pages', 'App\Controllers\Admin\PagesController');
});

我找到了这个方法:
$name = \Route::currentRouteName();
var_dump($name);

但是这个方法返回的是字符串'admin.pages.index'(长度为17)

我应该使用split来获取控制器还是Laravel有一个更好的方法?

3个回答

14
在 Blade 中:
<p style="font-weight:{{ (Route::current()->getName() == 'admin.pages.index' && Request::segment(0) == 'add') ? 'bold' : 'normal' }};">Pages</p>

8

Request::segments()会返回一个包含当前URL的数组,例如:

yoursite/admin/users/create

将会给出:

array(2) {
    [0] "admin"
    [1] "users"
    [2] "create"
}

谢谢,我该如何在“视图”中使用它?我的意思是在“Blade”模板中。 - MajAfy
请求在视图中是可访问的,但您也可以使用with方法传递它,例如:View::make('your-view')->with(array('activeController' => Request::segment(2))); 或 'activeMenus' => Request::segments()。 - diegofelix

7
您可以使用此方法(获取当前操作,即HomeController@index)。
Route::currentRouteAction();

这将返回像HomeController@index这样的action,您可以在视图中使用类似以下内容的东西。
<!-- echo the controller name as 'HomeController' -->
{{ dd(substr(Route::currentRouteAction(), 0, (strpos(Route::currentRouteAction(), '@') -1) )) }}

<!-- echo the method name as 'index' -->
{{ dd(substr(Route::currentRouteAction(), (strpos(Route::currentRouteAction(), '@') + 1) )) }}
Route::currentRouteName()方法返回您路由的名称,该名称在路由声明中使用了'as' => 'routename'

不建议在视图中开始应用字符串操作,这样做虽然可行但很混乱。如果您需要在呈现视图之前修改值,请考虑使用修饰符。至于导航菜单所需的部分,Request::segments() 提供了很多帮助。 - nJGL
@nJGL 同意!现在我不会这样做了,至少在这些年之后 :-) - The Alpha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接