我想为我的 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
。
知道如何让它发挥作用吗?
最佳答案
将提供的代码片段添加到 routes.php
后,您是否清除了缓存/编译 View 文件?如果没有,请尝试这样做,因为只有在 View 中检测到更改时,Blade 才会重新编译 View 。因此,如果您在添加代码后没有清除编译 View ,则呈现的 html 中没有任何变化。
如果不是这种情况,请尝试使用普通的旧正则表达式而不是 Blade::createMatcher,this漂亮的定义将为您提供单行中的继续和中断支持。
Blade::extend(function($value)
{
return preg_replace('/(\s*)@(break|continue)(\s*)/', '$1<?php $2; ?>$3', $value);
});
即使放在 routes.php 中它也应该可以工作,尽管最好将它放在一个单独的文件中(例如 blade.php 并将其包含在 global.php 中)。无论如何,它必须在处理 View 之前加载。
关于php - 如何扩展 Laravel Blade 功能并添加 'break' 和 'continue' 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21532488/