当网址与请求匹配时,我想将导航菜单标记为“有效”。
这很好用:
<div class="sidebar">
<ul class="sidebar-menu">
<li {{{ (Request::is('en/dashboard') ? 'class=active' : '') }}}>
<a href="/{{ App::getLocale() }}/dashboard">
<i class="fa fa-dashboard"></i> <span>{{ trans('sidebar.dashboard') }}</span>
</a>
</li>
<li {{{ (Request::is('en/settings') ? 'class=active' : '') }}}>
<a href="/{{ App::getLocale() }}/settings">
<i class="fa fa-gears"></i> <span>{{ trans('sidebar.settings') }}</span>
</a>
</li>
</ul>
</div>
不幸的是,当URL使用语言代码“en”时,它只能工作并标记导航菜单。但是,如何用更动态的东西替换静态字符串“en”?
我已经尝试使用此代码解决此问题,但它不起作用:
<li {{{ (Request::is('{{ App::getLocale() }}/dashboard') ? 'class=active' : '') }}}>
解决这个问题的最佳方法是什么?
答案 0 :(得分:3)
我现在正在使用这种解决方案,它可以很好地保持刀片清洁。
首先,在/cdn-cgi/l/email-protection#
中为每条路线指定一个唯一的名称:
routes/web.php
在导航刀片中(例如 <?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/admin/dashboard', 'DashboardController@getAll')->name('dashboard');
Route::get('/admin/maintenances', 'MaintenanceController@get')->name('maintenances-overview');
Route::get('/admin/users', 'UserController@getUsers')->name('users-overview');
),您现在可以简单地引用这些名称:
resources/views/layouts/admin/navbar.blade.php
当您使用多语言网站时,此解决方案也非常有用,因为您现在不必使用正则表达式来确定它是否匹配。您还可以编辑和更新您想要的路径URL,而无需更新所有刀片,只是因为URL已更改。 <li class="{{ Route::currentRouteName() == 'dashboard' ? 'active' : '' }}">
<a href="{{ route('dashboard') }}">Dashboard</a>
</li>
<li class="{{ Route::currentRouteName() == 'maintenances-overview' ? 'active' : '' }}">
<a href="{{ route('maintenances-overview') }}">Maintenances</a>
</li>
<li class="{{ Route::currentRouteName() == 'users-overview' ? 'active' : '' }}">
<a href="{{ route('users-overview') }}">Users</a>
</li>
函数返回autom。更新的URL和route()
函数始终返回路由的设置名称。 :)
就像提示多语言网站一样:您只需使用语言变量替换静态文本Route::currentRouteName()
:
Users
有关本地化的更多信息,请查看laravel.com localization documentation
答案 1 :(得分:1)
通常,我有一个布局,当前视图扩展了这些导航项,如下所示:
<li><a href="{{ url("home") }}>Home</a></li>
<li><a href="{{ url("about") }}>About</a></li>
<li><a href="{{ url("contact") }}>Contact</a></li>
然后我的路线:
Route::get("/home", "BasicController@getHome");
然后在我的控制器中:
public function getHome(){
return view("home")->with(["page" => "home"]);
}
现在,我的观看次数home.blade.php
已将$page
传递给它,并且因为它使用导航部分(通常为.blade
或其他内容)扩展了@extends("layouts.master")
文件可以针对这些导航项访问和检查$page
变量:
<li class="{{ $page == "home" ? "active" : "" }}><a href="{{ url("/home") }}>Home</a></li>
这样您就不必担心将多种语言的路由与其活动页面匹配。唯一的缺点是您需要在每个控制器中包含一个->with(["page" => "whatever"])
,它返回一个扩展该导航布局的视图。可能有一种更简单的方法来实现这一目标,但这应该会给你一个开始。
答案 2 :(得分:0)
很简单。只需在包含标题或导航栏和链接的文件中执行以下操作:
<li class="{{ (Request::path()=='nameofyourfile' ? 'active' : '') }}">
<a href="{{ route('nameofyourfile') }}">
<span class="icon fa fa-building-o" aria-hidden="true"></span><span class="title">nameofyourfile</span>
</a></li>
答案 3 :(得分:0)
将这个小函数代码放在助手类
中function is_current_route($route){
return Route::currentRouteName() == $route ? 'class=active' : '';
}
在你的观点中使用它
<li {{is_current_route('your-route-name-here')}}>
<a href="{{ url("/home") }}>Home</a>
</li>