【问题标题】:How to extend Laravel Blade functionality and add 'break' and 'continue' support如何扩展 Laravel Blade 功能并添加“中断”和“继续”支持
【发布时间】:2014-02-27 05:48:17
【问题描述】:

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

知道如何让它工作吗?

【问题讨论】:

  • 你在哪里添加了这个Blade::extend 命令?
  • @DennisBraga 这是我文件的第一行route.php

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


【解决方案1】:

在将提供的代码添加到routes.php 后,您是否清除了缓存/编译视图文件?如果没有,请尝试这样做,因为 Blade 只有在检测到更改时才会重新编译视图。因此,如果您在添加代码后没有清除编译后的视图,则呈现的 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 中)。无论如何,它必须在处理视图之前加载。

【讨论】:

  • 非常感谢,我已经检查了缓存,但是我不知道编译后的视图文件夹。这是我的问题的第一个原因,第二个是正则表达式。我用 Blade::createPlainMatcher() 替换了 Blade::createMatcher() 函数,现在它工作正常!
猜你喜欢
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多