You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Blade排除当前Locale后设置首个显示项为active的问题

解决Blade语言标签active类失效问题

直接在循环前处理语言数组,过滤掉当前Locale并重置索引,就能让$loop->first准确命中第一个要显示的标签,完美解决active类丢失的问题,而且完全适配后续从配置动态获取的语言列表。

具体实现

方法一:Blade内直接处理(快速实现)

@php
    // 替换成从config获取的语言数组,比如 config('app.supported_locales')
    $allLocales = ['ca','en','es','nl'];
    // 过滤掉当前使用的语言
    $displayLocales = array_filter($allLocales, fn($lang) => $lang !== app()->getLocale());
    // 重置数组索引,保证$loop->first能正确识别第一个元素
    $displayLocales = array_values($displayLocales);
@endphp

@foreach($displayLocales as $lang)
    <li>
        <a href="#{{ $lang }}" class="@if($loop->first) active @endif">
            {{ strtoupper($lang) }} <!-- 可按需替换为语言名称,比如 __('lang.'.$lang) -->
        </a>
    </li>
@endforeach

方法二:控制器提前处理(更优雅)

如果不想在视图里写过多PHP逻辑,可在控制器中先处理好要展示的语言数组,再传递到视图:

// 控制器代码示例
public function edit()
{
    $allLocales = config('app.supported_locales');
    $displayLocales = array_values(array_filter($allLocales, function($lang) {
        return $lang !== app()->getLocale();
    }));

    return view('your-form-view', compact('displayLocales'));
}

视图里直接循环即可:

@foreach($displayLocales as $lang)
    <li>
        <a href="#{{ $lang }}" class="@if($loop->first) active @endif">
            {{ strtoupper($lang) }}
        </a>
    </li>
@endforeach

方案优势

  • 彻底规避原循环中跳过元素导致$loop->first失效的问题,逻辑更可靠
  • 完全不依赖硬编码的语言值,不管配置里的语言列表顺序、数量怎么变,都能正常工作
  • 代码简洁,没有冗余的if else判断

内容的提问来源于stack exchange,提问作者Hardist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 06:50:33