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

在Laravel中间件中设置全局变量与文本方向

解决Laravel中全局设置文本方向(RTL/LTR)的问题

嘿,既然你已经有了处理语言设置的中间件,那直接在这个中间件里扩展功能就行,完全不用在每个控制器里重复操作,给你两种实用的方案:

方案一:使用视图共享(View::share)

这是最直接的方式,在你的语言中间件里,设置完locale后,判断当前语言是否属于RTL方向,然后把这个状态共享给所有Blade视图:

public function handle($request, Closure $next) {
    $langSetting = SystemSetting::find('System Language');
    $locale = $langSetting->value;
    \App::setLocale($locale);

    // 定义需要RTL的语言列表,根据你的需求添加更多语言代码
    $rtlLanguages = ['ar', 'fa', 'he', 'ur'];
    $isRtl = in_array($locale, $rtlLanguages);

    // 把RTL状态共享给所有视图,这样所有Blade都能直接用$RTL变量
    \Illuminate\Support\Facades\View::share('RTL', $isRtl);

    return $next($request);
}

这样你原来的Blade代码完全不用改,直接就能用$RTL变量判断加载对应的CSS文件。

方案二:存入应用配置(config)

如果你不仅需要在视图里用,还可能在控制器、模型等其他地方用到RTL状态,推荐把它存入应用配置:

public function handle($request, Closure $next) {
    $langSetting = SystemSetting::find('System Language');
    $locale = $langSetting->value;
    \App::setLocale($locale);

    $rtlLanguages = ['ar', 'fa', 'he', 'ur'];
    $isRtl = in_array($locale, $rtlLanguages);

    // 把RTL状态存入临时配置,全局可访问
    config(['app.rtl' => $isRtl]);

    return $next($request);
}

对应的Blade代码可以改成这样:

@if (config('app.rtl'))
    {{ Html::style('css/rtl/app-rtl.css') }}
@else
    {{ Html::style('css/app.css') }}
@endif

最后要注意的点

确保你的这个中间件已经添加到app/Http/Kernel.php的$middlewareGroups['web']数组里,这样每次Web请求都会执行这个中间件,全局生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:13:12