【问题标题】:Laravel blade hardcode variable on compile编译时的 Laravel 刀片硬编码变量
【发布时间】:2015-02-27 19:30:55
【问题描述】:

我将一些视图字符串移动到配置,因为我想为类似的网站使用相同的代码,我想知道是否有办法避免在每个运行时调用 Config:: 或 Lang:: .

<h1>{{ Config::get('siteName') }}</h1>

刀片进入

<h1><?php echo Config::get('siteName'); ?></h1>

但我希望它只是普通的 HTML,例如

<h1>MySite</h1>

我的方法是在 Blade 将视图编译成普通的 PHP / HTML 时尝试这样做,是否有任何内置方法可以做到这一点?我尝试了一些 Blade 方法,例如 @string,但没有结果

谢谢

【问题讨论】:

    标签: php laravel-4 blade


    【解决方案1】:

    在您的控制器上执行此操作

    $siteName = Config::get('app.siteName');
    View::make('xxx', array('siteName' => $siteName))
    

    例如

    您将能够在您的视图中检索 te 变量 siteName 仅

    {{$siteName}}
    

    希望这会有所帮助(或者我不明白这个问题)

    【讨论】:

    • 这不是问题,因为它会在每个请求上调用 Config,我希望 siteName 在它们被编译到 /storage/views 后在视图中是纯 HTML
    【解决方案2】:

    OK 通过扩展 Blade 解决了这个问题

    我创建了一个刀片标签,例如

    @hardcodeConfig('siteName')
    

    在我的 Blade_extensions 中,我这样做了:

    Blade::extend(function($view, $compiler)
    {
        $pattern = $compiler->createMatcher('hardcodeConfig');
        $matches = [];
        preg_match_all($pattern, $view, $matches);
        foreach($matches[2] as $index => $key){
            $key = str_replace([ "('", "')" ], '', $key);
            $configValue = \Config::get( $key );
            $view = str_ireplace($matches[0][$index], $configValue, $view);
        }
        return $view;
    });
    

    这正是我一直在寻找的,我为 Config 创建了一个,为 Lang 创建了另一个

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-08
      • 2017-02-24
      • 2014-05-01
      • 1970-01-01
      • 2017-06-17
      • 2020-01-24
      • 2014-03-27
      • 2015-11-17
      相关资源
      最近更新 更多