我想为我的Blade引擎添加@continue
和@break
语句,以便控制我的循环。
我已经看到了BladeEngine的extend
函数来源,我试图在我的routes.php
文件中使用它:
Blade::extend(function ($value) {
$pattern = Blade::createMatcher('continue');
return preg_replace($pattern, '$1<?php continue; ?>$2', $value);
});
我的一个观点:
@if (isset($meta['foo']) && !$meta['bar'])
@continue
@else
<li>{{$meta['pseudo']}}</li>
@endif
但呈现的HTML页面显示@continue
。
了解如何使其发挥作用?
答案 0 :(得分:8)
在将提供的代码段添加到routes.php
后,您是否清除了缓存/已编译的视图文件?如果没有,请尝试这样做,因为只有在检测到更改时,Blade才会重新编译视图。因此,如果在添加代码后没有清除已编译的视图,则渲染的html中没有任何更改。
如果不是这样,请尝试使用普通的旧正则表达式而不是Blade :: createMatcher,this漂亮的定义将为您提供oneliner中的continue和break支持。
Blade::extend(function($value)
{
return preg_replace('/(\s*)@(break|continue)(\s*)/', '$1<?php $2; ?>$3', $value);
});
即使放在routes.php中它也应该工作,尽管最好将它放在一个单独的文件中(例如blade.php并将其包含在global.php中)。无论如何,它必须在处理视图之前加载。