放置刀片的位置::扩展

2022-08-30 19:32:41

我想将以下代码添加到我的 laravel 项目中,以支持 blade 中的 break 和 continue 语句。

这是代码:

Blade::extend(function($value)
{
  return preg_replace('/(\s*)@(break|continue)(\s*)/', '$1<?php $2; ?>$3', $value);
});

我不知道把它放在哪里,任何帮助将不胜感激?


答案 1

拉拉维尔 5 替代方案

1)创建app/Providers/BladeServiceProvider.php

<?php namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class BladeServiceProvider extends ServiceProvider
{
    public function boot()
    {
        /* @datetime($var) */
        \Blade::extend(function($view, $compiler)
        {
            $pattern = $compiler->createOpenMatcher('datetime');

            return preg_replace($pattern, '$1<?php echo $2->format(\'m/d/Y H:i\')); ?>', $view);
        });

        /* @eval($var++) */
        \Blade::extend(function($view)
        {
            return preg_replace('/\@eval\((.+)\)/', '<?php ${1}; ?>', $view);
        });
    }

    public function register()
    {
        //
    }
}

2) 在添加config/app.php

<?php

return [

    // ...

    'providers' => [

        // ...

        'App\Providers\BladeServiceProvider',

3) 运行php artisan clear-compiled

4) 在您的模板中使用或,例如@datetime($updated_at)@eval($var = 1)@eval($var++)

5)重要备注

blade模板被缓存,尝试在刀片中进行虚拟更改,这样laravel将重新编译模板 - sbedulin 2月9日17:43

除了sbedulin为Laravel 5提供出色的解决方案

a) 运行可能会有所帮助php artisan clear-compiled

b) 我更改了

$pattern = $compiler->createOpenMatcher('datetime');

return preg_replace($pattern, '$1<?php echo $2->format(\'m/d/Y H:i\')); ?>', $view);

因为 Laravel 5 文档中的示例将不起作用。

示例现已更正。

该示例已删除。


答案 2

没有要求告诉你应该把代码放在哪里,你甚至可以把它放在你的(当然这有点乱)。您只需要确保在 laravel 处理页面视图时加载它即可。routes.php

在这种情况下,在某个地方创建新文件并将其包含在其中可能是一个很好的解决方案。blade_extensions.phpstart/global.php

PS:请务必清除已编译的视图,因为 Blade 仅在检测到更改时才重新编译视图,因此,如果您刚刚在这段代码中进行了操作,则在清除视图之前,它将不起作用。


推荐