我想将以下代码添加到我的laravel项目中,以支持blade中的break和continue语句。
这是代码:
Blade::extend(function($value)
{
return preg_replace('/(\s*)@(break|continue)(\s*)/', '$1<?php $2; ?>$3', $value);
});
我不知道无论放在哪里,都会感激任何帮助吗?
答案 0 :(得分:32)
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现已更正。
示例已删除。
答案 1 :(得分:19)
没有要求告诉你应该把代码放在哪里,你甚至可以把它放在你的routes.php
中(当然这有点乱)。您只需确保在laravel处理页面视图时加载它。
在这种情况下,在某处创建新文件blade_extensions.php
并将其包含在start/global.php
中可能是一个很好的解决方案。
PS:请务必清除已编译的视图,因为Blade只会在检测到更改时重新编译视图,因此如果您只是修改了此代码,则在清除视图之前它将无效。
答案 2 :(得分:8)
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();
}
}