编译时的Laravel刀片硬编码变量

时间:2015-02-26 14:41:18

标签: php laravel-4 blade

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

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

刀片进入

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

但我希望它只是简单的HTML,如

<h1>MySite</h1>

当Blade将视图编译为纯PHP / HTML时,我的方法是尝试实现这一点,是否有任何内置方法可以做到这一点?我尝试过一些像@string这样没有结果的Blade方法

由于

2 个答案:

答案 0 :(得分:0)

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

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

例如

您只能使用

在视图中检索te变量siteName
{{$siteName}}

希望这会有所帮助(或者我可能不理解这个问题)

答案 1 :(得分:0)

通过扩展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

创建了另一个