【问题标题】:Set global variable / text direction in Laravel middleware在 Laravel 中间件中设置全局变量/文本方向
【发布时间】:2018-05-20 22:12:18
【问题描述】:

我有一个中间件,它从数据库中读取语言设置并相应地应用应用程序区域设置:

public function handle($request, Closure $next)
{

    $lang = SystemSetting::find('System Language');
    \App::setLocale($lang->value);

    return $next($request);
}

我还想设置文本方向(rtl 或 ltr),以便我的刀片模板可以使用它,以便加载必要的 css 文件。

我可以在控制器中轻松完成,但我不想在每个控制器中重复它并将其传递给我应用程序中每个页面的视图。有没有办法设置一个全局变量或类似的东西,所以我可以在我的刀片模板中做到这一点:

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

【问题讨论】:

    标签: laravel


    【解决方案1】:

    您可以使用视图外观,您可以阅读有关here 的更多信息。

    这使您可以直接为视图准备任何数据并使其可用。

    <?php
    
    use Illuminate\Support\Facades\View;
    
    public function handle($request, Closure $next)
    {
    
        $lang = SystemSetting::find('System Language');
        \App::setLocale($lang->value);
    
        View::share('rtl', true);
    
        return $next($request);
    }
    

    但我建议考虑闪烁这个into the session.

    【讨论】:

    • 但是如果我把它刷到会话中,我是不是还得把它从控制器传递给视图?我将状态消息闪烁到会话并仍然从控制器传递它们。
    • @Patriot 啊,是的。由于您使用的是刀片,因此您也可以从视图中的会话外观中获取值。
    【解决方案2】:

    你可以通过翻译改变

    <html lang="{{config('app.locale')}}" dir="{{@trans('interface.dir')}}">
    

    ar 文件中的接口:

     return [
     //add this line in ar file
    'dir' =>'rtl', 
    ]
    

    en 文件中的接口:

      return [
    //add this line in en file
        'dir' =>'ltr',
        ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多