Laravel 编译时的 blade 硬编码变量

Laravel blade hardcode variable on compile

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

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

刀锋进

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

但我希望它像

一样简单HTML
<h1>MySite</h1>

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

谢谢

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

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

例如

并且您将能够仅使用

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

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

OK 通过扩展 Blade

解决了它

我创建了一个 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 创建了另一个