php - 如何扩展 Laravel Blade 功能并添加 'break' 和 'continue' 支持

标签 php laravel laravel-4 laravel-blade laravel-routing

我想为我的 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/

相关文章:

php - 如何使用 php 从 dhtmlx 调度程序保存/更新事件

javascript - Laravel:上传从数组创建的多行

php - Laravel Artisan Migrate 不创建表

mysql - Laravel 无法选择最后一行。 "Call to a member function first() on a non-object"错误

php - 如果另一个字段为假,如何验证一个字段必须为真

php - Laravel: URL::to ('/' ) 本地主机的端口号不包含在数据库种子文件中

PHP/MySQL - 计算每个预订的总计

php - 有没有办法获取变量的名称? PHP-反射

php - 如何重定向到移动网站,同时仍然打开选项以查看桌面版本

php - 从 MySql 加载的脚本渲染 Blade 模板 var