在哪里放置Blade :: extend

Vin*_*ent 19 php laravel blade

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

这是代码:

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

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

slp*_*slp 32

Laravel 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()
    {
        //
    }
}
Run Code Online (Sandbox Code Playgroud)

2)config/app.php补充说

<?php

return [

    // ...

    'providers' => [

        // ...

        'App\Providers\BladeServiceProvider',
Run Code Online (Sandbox Code Playgroud)

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文档中的示例不起作用.

示例现在已得到纠正.

该示例已被删除.


cir*_*van 19

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

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

PS:请务必清除已编译的视图,因为Blade只会在检测到更改时重新编译视图,因此,如果您只是修改了此代码,则在清除视图之前它将无法工作.


sbe*_*lin 8

Laravel 5更新:

1)您可能希望Extensions\BladeExtensions.php在与Models, Providers, Services文件夹相同的级别上创建文件夹\文件

2) BladeExtensions.php

<?php namespace App\Extensions;

class BladeExtensions {

    public static function register()
    {
        \Blade::extend(function($view, $compiler)
        {
            $pattern = $compiler->createMatcher('datetime');

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

}
Run Code Online (Sandbox Code Playgroud)

3) AppServiceProvider.php

// ...
use App\Extensions\BladeExtensions;

class AppServiceProvider extends ServiceProvider
{
    // ...
    public function register()
    {
        // ...

        BladeExtensions::register();
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 要删除缓存的模板,您还可以清除`storage\framework\views`和`storage\framework\cache`文件夹 (2认同)