Я хочу добавить следующий код в свой проект 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/YH:i\')); ?>', $view); }); /* @eval($var++) */ \Blade::extend(function($view) { return preg_replace('/\@eval\((.+)\)/', '<?php ${1}; ?>', $view); }); } public function register() { // } }
2) в config/app.php
add
<?php return [ // ... 'providers' => [ // ... 'App\Providers\BladeServiceProvider',
3) запустите php artisan clear-compiled
4) в вашем шаблоне используйте @datetime($updated_at)
или @eval($var = 1)
, @eval($var++)
например
5) важное замечание
шаблоны клипов кэшируются, попытайтесь сделать ложное изменение в лезвии, таким образом, laravel перекомпилит шаблон – sbedulin 9 февраля в 17:43
a) может быть полезно выполнить php artisan clear-compiled
б) я изменил код для
$pattern = $compiler->createOpenMatcher('datetime');
а также
return preg_replace($pattern, '$1<?php echo $2->format(\'m/d/YH:i\')); ?>', $view);
потому что пример из документации Laravel 5 не будет работать.
Теперь пример исправляется.
Пример удален.
Обновление Laravel 5:
1) Возможно, вы захотите создать папку Extensions\BladeExtensions.php
\ файл на том же уровне, что и папки 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/YH:i\'); ?>', $view); }); } }
3) AppServiceProvider.php
// ... use App\Extensions\BladeExtensions; class AppServiceProvider extends ServiceProvider { // ... public function register() { // ... BladeExtensions::register(); } }