Blade::extendを配置する場所 質問する

Blade::extendを配置する場所 質問する

Blade の break および continue ステートメントをサポートするために、次のコードを Laravel プロジェクトに追加します。

コードは次のとおりです:

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

どこに置けばよいのか全くわかりません。助けていただけないでしょうか?

ベストアンサー1

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()
    {
        //
    }
}

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 ドキュメント 動作しないでしょう。

修正されました。

例は削除されました。

おすすめ記事