如何创建自定义 Symfony2 Twig 表单模板块

2024-01-01

我正在开发一个项目,我需要一些自定义表单模板块。不是现有块的修改版本,而是新块。

我已经能够创建新的块并让 Symfony/Twig 识别和使用它们,但有限制。

表单模板块似乎有严格的命名约定。 看来模板名称必须恰好包含一个下划线。下划线之前的单词似乎也有要求和/或限制。我已经能够让 form_ 工作,但除此之外什么都没有。此外,如果您以 _widget 结尾块的名称,则不会引发异常,但如果您直接在页面模板中使用该块,则不会呈现任何内容。我认为 _widget 块只能在 form_blocks 中使用(正确吗?)。

我的目标是使用项目的首字母缩写(wwui)来命名所有新的自定义块,以便其他开发人员(以及我自己在路上的某个地方:-)非常清楚哪些标签特定于该项目。

这就是我为达到当前观点所做的事情:
- 创建 Symfony 表单自定义文档中指定的 fields.html.twig 文件
- 在 config.yml 的 twig.form.resources 中指定该表单
- 使用函数声明创建 Twig 扩展 - 在我的模板中使用我的新块

一个简单的例子:

// TwigExtension.php
...
public function getFunctions()
{
  $ret = 
  [
    new \Twig_SimpleFunction( 'wwui_myBlock', 
            null,
            [ 'node_class' => 'Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode',
'is_sage' => [ 'html' ]] ),
    ...
  ];
  return $ret;
)

{# fields.html.twig #}
{% block wwui_myBlock %}
  <p>A simple literal for testing.</p>
{% endblock wwui_myBlock %}

这将引发异常:

An exception has been thrown during the rendering of a template ("Unable to render the form as none of the following blocks exist: "_siteActivityQueryForm_myBlock", "siteActivityQueryForm_myBlock", "form_myBlock".") in SiteBundle:Queries:activity.html.twig at line 31.

如果我将其重命名为 form_byBlock 它工作正常。

所以,问题是:
自定义表单块的正式命名要求和限制是什么。


Update 27-Aug-2015 09:30
Some additional information in response to a comment by @lxg:

A block是一个简单的 HTML/Twig 代码块,可以在子模板中覆盖。

我认为这并不完全准确。块(至少是表单块)是像 Twig 函数一样引用的 Twig 片段(例如,{{ form_widget( form ) }}).

我在这里专门询问表单块。

其中许多函数定义在vendor/symfony/symfony/Bridge/Twig/Extension/FormExtension.php.
和其中几个(form_widget(), form_errors(), form_label(), form_row(), form_rest(), form_start(), and form_end())由类实现Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode(参见getFunctions()中的方法FormExtension.php).

这些的 Twig 片段定义在vendor/symfony/symfony/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig.

我想要做的是创建具有项目特定名称的新表单块。

我已经能够创建新的自定义表单块(如上所示),但不能使用我想要使用的名称。

检查Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode()方法没有产生额外的理解。


事实证明Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode()方法是限制的来源。

还有另一种方法可以让我使用我想要的名称。这是Symfony\Bridge\Twig\Node\RenderBlockNode().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建自定义 Symfony2 Twig 表单模板块 的相关文章

随机推荐

  • docker selenium/standalone-chrome 无法连接到 docker web 服务器

    我正在尝试使用 codeception 来运行使用 docker 容器开发的 php 网站的测试 我在 Web 容器中创建了一个测试文件夹并将 codecept phar 放在那里 这是项目的设置 docker compose yml ve
  • Spring Boot应用程序中的双日志文件

    我有一个名为 service1 的 Spring Boot 应用程序 它使用以下属性文件层次结构来配置日志 bootstrap yml 有 spring application name service1 application yml 有
  • MySQL 触发器为新行设置值并更新同一表中的另一行

    我有一个表格来跟踪特定项目的费用 这些费用可能会随着时间的推移而变化 因此我有两列 startDate endDate 当前的费用集始终在遥远的将来有一个 endDate 我已经有一个触发器 用于对输入的新行进行一些计算 但我还希望发生的是
  • Java 中的 XSLT 转换极其缓慢

    我尝试使用 XSLT 转换 XML 文档 作为输入 我有 www wordpress org XHTML 源代码 XSLT 是检索站点标题的虚拟示例 实际上它什么也做不了 它不会改变任何东西 我使用的每个 API 或库 转换大约需要 2 分
  • 如何使 JavaFX TableView 单元格可编辑?

    有很多教程和很多建议 可以通过扩展 JavaFX 单元使其可编辑来实现此目的 好的一个是这个计算器问题 https stackoverflow com questions 7880494 tableview better editing t
  • 在 Objective C 中使用下划线作为属性名称前缀 [重复]

    这个问题在这里已经有答案了 我以前避免在变量名中使用下划线 这可能是我大学 Java 时代的遗留下来的 因此 当我在 Objective C 中定义属性时 我自然会这样做 In the header interface Whatever N
  • “警告 C0007:架构具有未绑定的实例”问题!

    我从 数字设计基础 一书随附的 CD 中获取了以下源代码 当我尝试运行该程序时 出现以下错误 Compiling Fig17 13 vhd C Users SPIDER Desktop EE460 The Final Project Fig
  • 如何在 SQL 中表示和插入有序列表?

    我想在 SQL 表中表示列表 hi hello goodbye good day howdy 按照该顺序 pk i val 1 0 hi 0 2 hello 2 3 goodbye 3 4 good day 5 6 howdy pk 是主键
  • MVC 获取 Azure Active Directory 经过身份验证的用户的名字和姓氏

    我可以使用以下方法获取经过身份验证的用户的用户名 电子邮件格式 var autenticateduser HttpContext User Identity Name 使用 QuickWatch 窗口 我可以使用以下表达式找到名字和姓氏 有
  • 如何在Delphi中定义版本“及以上”ifdefs?

    我正在努力让 Log4D 在 Delphi XE4 中工作 并且遇到一些编译错误 因为它在 use 子句中找不到 Contnrs 除非我将它移到它定义的 ifdef 之外 IFDEF DELPHI5 UP Contnrs ENDIF 经过一
  • 将轮询 Web 服务转换为 RX

    Given public partial class Weather private readonly DispatcherTimer timer new DispatcherTimer private readonly IWeatherD
  • Django 模板内联 jQuery 不起作用

    尝试在我的模板中使用内联 jQuery 以便稍后可以在 AJAX 调用中使用 django url 标签 但我无法让 javascript 工作 在我的子页面中 我扩展了索引页面 其中包含我所有的 javascript 和 jQuery 库
  • 限制减法结果的下限

    我想从标量中减去向量中的值 但是 如果结果小于零 我想将结果设置为零 我尝试过使用max 但它没有给我预期的结果 s 1 750 0 975 0 1125 0 1237 5 1312 5 1400 0 max 1050 s 0 1 300
  • 如何使用apache Camel从mysql表中读取数据并写入到另一个表中

    伙计们 我正在使用 Apache Camel 从 mysql 表读取数据 我在控制台上成功打印它 但根据我的要求 我需要从一个mysql数据库读取数据 然后使用某种条件过滤它 然后将过滤后的数据插入到另一个mysql数据库表中 我在下面发布
  • 如何在Rails中检索图像的EXIF信息

    我正在使用 Rails 回形针在我的页面中显示图像 我想知道如何检索图像的 EXIF 信息 如尺寸 相机型号 高度 宽度等 有人可以帮我吗 谢谢 你给了吗exifr https github com remvee exifr 宝石尝试一下吗
  • 如何在 Java 中覆盖 HTTP 连接中的 DNS

    Curl 具有手动指定将主机解析到哪个 IP 的功能 例如 curl https google com resolve google com 443 173 194 72 113 这在使用 HTTPS 时特别有用 如果只是一个 HTTP 请
  • 在 Scala 工作表中使用自定义枚举时收到错误:java.lang.ExceptionInInitializerError

    UPDATE 2014年9月17日 事实证明 即使先前更新 从 2013 年 2 月 19 日起 中的解决方案无法工作如果一个地方println Value Player2 作为第一个命令 即序数仍然分配不正确 从那以后我创建了一个可验证的
  • Google Play 分阶段推出并修改了屏幕截图

    使用 Google Play 分阶段推出选项 我可以向一小部分用户发布 Android 应用的新版本 根据它的成功程度 我会在给定时间内增加百分比 我假设 因为我找不到记录 如果我将应用程序推广到 10 那么该应用程序的新用户和现有用户都会
  • 使用 nil 合并运算符缩短编译时间

    读完后article https habrahabr ru post 283106 关于快速编译时间 我感兴趣的是为什么使用超过 2 个序列合并运算符会显着增加编译时间 例子 编译时间 3 65 秒 func fn gt Int let a
  • 如何创建自定义 Symfony2 Twig 表单模板块

    我正在开发一个项目 我需要一些自定义表单模板块 不是现有块的修改版本 而是新块 我已经能够创建新的块并让 Symfony Twig 识别和使用它们 但有限制 表单模板块似乎有严格的命名约定 看来模板名称必须恰好包含一个下划线 下划线之前的单