次のコードを laravel プロジェクトに追加して、ブレードの break および continue ステートメントをサポートしたいと考えています。
これはコードです:
Blade::extend(function($value)
{
return preg_replace('/(\s*)@(break|continue)(\s*)/', '$1<?php $2; ?>$3', $value);
});
私はそれをどこに置くべきか分かりませんが、何か助けていただければ幸いです。
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
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 ドキュメントの例は機能しないためです。
例は現在修正されています。
例は削除されました。
コードを配置する場所を指定する必要はありません。コードを配置することもできますroutes.php(もちろん、これは少し面倒です)。laravel がページビューを処理するときにロードされていることを確認するだけで済みます。
この場合、blade_extensions.phpどこかに新しいファイルを作成し、それを含めるstart/global.phpのが良い解決策かもしれません。
PS: Blade は変更を検出した場合にのみビューを再コンパイルするため、コンパイル済みのビューを必ずクリアしてください。
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();
}
}