web-dev-qa-db-ja.com

Blade :: extendを配置する場所

次のコードをlaravelプロジェクトに追加して、ブレードのbreakステートメントとcontinueステートメントをサポートしたいと思います。

これはコードです:

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

どこに置くかわかりませんが、何か助けていただければ幸いです。

20
Vincent

コードをどこに置くべきかを指示する必要はありません。コードをroutes.phpに入れることもできます(もちろん少し面倒です)。 laravelがページビューを処理するときにのみロードされることを確認する必要があります。

この場合、どこかに新しいファイルblade_extensions.phpを作成し、それをstart/global.phpに含めることは良い解決策かもしれません。

PS:Bladeは変更を検出した場合にのみビューを再コンパイルするため、コンパイルされたビューを必ずクリアしてください。したがって、このコードを入力したばかりの場合は、ビューをクリアするまで機能しません。

19
ciruvan

Laravel5の代替

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

Laravel 5のためのsbedulinの素晴らしいソリューションに加えて

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 Documentation の例は機能しないためです。

example が修正されました。

例は削除されました。

32
slp

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);
        });
    }

}

3)AppServiceProvider.php

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

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

        BladeExtensions::register();
    }

}
8
sbedulin