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