在 laravel 中动态设置菜单项的活动类
Posted
技术标签:
【中文标题】在 laravel 中动态设置菜单项的活动类【英文标题】:Setting active class for menu items dynamically in laravel 【发布时间】:2020-08-10 15:35:29 【问题描述】:我正在使用 bootstrap 4 创建一个 laravel 应用程序。
我的主导航菜单位于 app.blade.php
中。我有四个主要刀片,关于、产品、联系和博客。
然后我需要根据当前页面更改菜单项活动类。由于菜单是从app.blade.php
动态加载的,因此我必须在导航菜单中动态设置当前页面的活动类。
我所做的是在每个刀片中定义一个名为 $currentpage
的变量并为其分配页面名称,假设它是 blog.blade.php
<?php $currentPage = 'blog';?>
@extends('layouts.app')
@section('content')
在app.blade.php
,
<li class="<?php if($currentPage =='blog')echo 'nav-item active';?>">
<a class="nav-link " href=" url('/blog') "> __('sentence.Blog') </a>
</li>
所以这可以正常工作..
但我想知道这是正确的做法吗?还有哪些其他可能的方法可以满足我的要求
【问题讨论】:
是的,我更喜欢这种方式,因为我在我的项目中使用过这种方式 没错。 Bt 我建议使用三元运算符:(condition) ? true : false
;
您也可以对页面使用会话,当特定页面在控制器中渲染时,您可以在会话中设置页面名称,这样做的好处是您不需要为每个刀片文件都去设置页面名称。
【参考方案1】:
您可以使用request()->is()
方法,而不是在布局文件中定义$currentPage
变量:
<li class="nav-item request()->is('blog') ? 'active' : ''">
<a class="nav-link " href=" url('blog') "> __('sentence.Blog') </a>
</li>
is()
方法本质上采用请求的当前 url 路径,并使用 Str::is() 来检查您传入的模式。
这样您只需检查当前 URL 是否与链接 URL 匹配,而不必在应用程序的其他地方定义额外的数据。
【讨论】:
【参考方案2】:在 Laravel 中动态设置菜单项的活动类,检查 PHP 刀片文件的以下代码以检查菜单项中的多个数组段和设置活动类。
@php
$segment1 = Request::segment(1);
$pages = array('blog', 'account', 'profile', 'settings');
@endphp
<li class="@if(in_array($segment1, $pages)) active @endif">
<a href="javascript: void(0);">
<span>Blog</span>
</a>
</li>
【讨论】:
以上是关于在 laravel 中动态设置菜单项的活动类的主要内容,如果未能解决你的问题,请参考以下文章