21

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

これはコードです:

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

私はそれをどこに置くべきか分かりませんが、何か助けていただければ幸いです。

4

3 に答える 3

34

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)or@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 ドキュメントの例は機能しないためです。

は現在修正されています。

例は削除されました。

于 2015-02-21T01:38:02.970 に答える
19

コードを配置する場所を指定する必要はありません。コードを配置することもできますroutes.php(もちろん、これは少し面倒です)。laravel がページビューを処理するときにロードされていることを確認するだけで済みます。

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

PS: Blade は変更を検出した場合にのみビューを再コンパイルするため、コンパイル済みのビューを必ずクリアしてください。

于 2013-08-20T07:54:50.457 に答える
8

Laravel 5 の更新:

Extensions\BladeExtensions.php1)フォルダと同じレベルにフォルダ\ファイル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();
    }

}
于 2015-02-09T16:19:10.930 に答える