如何使用 Symfony Forms 将事件侦听器添加到动态添加的字段

2023-12-01

我正在使用事件侦听器来动态修改表单。我想向动态添加的字段添加另一个事件侦听器。我不知道如何实现这一点。

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('first_field','choice',array(
        'choices'=>array('1'=>'First Choice','2'=>'Second Choice')
    ));

    $builder->addEventListener(FormEvents::PRE_SET_DATA, array($this, 'preSetData'));
    $builder->get('first_field')->addEventListener(FormEvents::POST_SUBMIT, array($this, 'postSubmit'));
}

public function preSetData(FormEvent $event)
{
    $form = $event->getForm();
    $form->add('second_field','choice',array(
        'choices'=>array('1'=>'First Choice','2'=>'Second Choice')
    ));
    //Some how add an event listener to this field

}

public function postSubmit(FormEvent $event)
{
    $form = $event->getForm()->getParent();
    $form->add('second_field','choice',array(
        'choices'=>array('1'=>'First Choice','2'=>'Second Choice')
    ));
    //Some how add an event listener to this field
}

我尝试过使用$builder in the buildForm函数将事件监听器添加到second_field但由于最初生成表单时该字段不存在,因此会引发错误。

如果我尝试通过执行以下操作在第一个事件侦听器中添加新的事件侦听器:

$form->get('second_field')->addEventListener(...)

然后我收到错误:

Call to undefined method Symfony\Component\Form\Form::addEventListener() 

欢迎大家提出意见。


如果,真的是这样吗。

FormInterface 没有 addEventListener 方法,但 FormBuilderIntreface 有。如果您想添加任何侦听器,您应该通过表单生成器创建表单字段。

例如:

   // create builder for field
   $builder = $form->getConfig()->getFormFactory()->createNamedBuilder($name, $type, null, array(
       /** any options **/
       'auto_initialize'=>false // it's important!!!
   ));
   // now you can add listener
   $builder->addEventListener(FormEvents::POST_SUBMIT, $yourCallbackHere)

   // and only now you can add field to form  
   $form->add($builder->getForm());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Symfony Forms 将事件侦听器添加到动态添加的字段 的相关文章

  • XDebug 与 Symfony 和 PhpStorm 不起作用(Ubuntu 安装)

    关于我的系统的事实乌班图15 10PHP 5 6 11交响乐2 7PhpStorm 10调试2 4我真的很难让 xdebug 在 PhpStorm 的 Symfony 项目下工作 我安装了xdebug 在我的 etc php5 apache
  • 当存在联系时如何为数组分配排名号

    当尝试为数组中存在平局的数值分配排名时 我很难知道从哪里开始 因此 例如 我需要像下面这样转换一个数组 myarray 4 76 34 13 34 到另一个数组中 例如 myarray2 1 5 3 5 2 3 5 基本上 当相同的数字在数
  • 未捕获的 ValueError:mysqli_stmt::execute():参数 #1 ($params) 必须是列表数组

    我试图通过这两个查询在我的数据库中插入准备好的语句多个值 这两个查询都发生故障 返回 未捕获的错误 调用未定义的方法 mysqli stmt bindValue 对于第一个代码或 未捕获的 ValueError mysqli stmt ex
  • 返回变量在 PHP 中不起作用(即没有返回值!)

    我更喜欢使用 Python 语言进行编程 但必须使用 PHP 来处理特定的网站应用程序项目 在 PHP 中 我试图将函数中的值 返回 到主程序环境 用于后续计算 但无论我尝试什么 函数中计算的值都不会返回该值 而是从函数中回显 工作正常 在
  • 将 jQuery 数组字符串转换为 PHP 数组

    首先 我得说我对 PHP 还很陌生 我正在尝试获取一个可以使用 foreach 的 PHP 对象 以下字符串通过 ajax 传递 我正在尝试转动以下字符串 menu title TEST1 href title TEST2 href QWE
  • 如何将 Filesystem 类的 glob 方法与 StorageFacade 结合使用?

    这涉及到拉拉维尔 5 我可以看到Illuminate Filesystem Filesystem一个方法叫做glob pattern flags 0 不幸的是 这个方法并没有体现在默认的情况下FilesystemAdapter随 Larav
  • 如何为 Lumen 的封闭路线指定路线名称?

    您好 我有以下流明路线 router gt get end function Illuminate Http Request request use router controller router gt app gt make App H
  • 在 symfony2 中为特定控制器设置 max_execution_time

    Using ini set 我可以扩展最大执行时间一个脚本的 在Symfony2 我可以添加ini set to web app php and web app dev php将增加的执行时间应用于所有控制器 但在这种情况下 我只想扩展最大
  • 为什么我应该使用 $_GET 和 $_POST 而不是 $_REQUEST? [复制]

    这个问题在这里已经有答案了 除此之外 REQUEST从 cookie 读取 有什么理由我应该使用 GET and POST代替 REQUEST 这样做的理论和实践理由是什么 当我只想让用户的某些数据返回某些数据时 我使用 REQUEST 当
  • xdebug_start_trace 行为异常

    我正在尝试进一步减少脚本内存使用量 我试图让我的脚本使用 xdebug 生成输出来分析内存使用情况 这是一个基于 CLI 的脚本 有 shebang usr local bin php q 我向它传递一个参数并检查它 argc gt 1 i
  • PHP 警告 ZipArchive::extractTo():权限被拒绝

    我创建了一个应用程序 它使用 ZipArchive 类 php 中的标准 中的方法 extractTo 并在 Windows 7 上的本地主机 apache 服务器上对其进行了测试 没有任何问题 但是当我在一些unix生产服务器上尝试过它之
  • 翻译即时消息

    如果表单成功 我正在尝试翻译我发送的即时消息 正常的请求是这样的 request gt getSession gt getFlashBag gt add notice Your E Mail has been sent 所以我尝试使用以下变
  • ZF2 工厂获取参数

    我有一个动态类别导航 在导航工厂中 我想从路线获取参数 我怎样才能做到这一点 在我看来 在我的 module php 中 public function getServiceConfig return array factories gt
  • 解析 PHP 响应:未捕获的语法错误:意外的标记 <

    我正在使用 AJAX 来调用 PHP 脚本 我唯一需要从响应中解析的是脚本生成的随机 ID 问题是 PHP 脚本会引发许多错误 这些错误实际上很好 不会妨碍程序功能 唯一的问题是当我跑步时 parseJSON response I get
  • 使 div 的大小与其内部图像的大小相同

    我有一个带有以下代码的div HTML div img src img logo png div CSS div imgContainer width 250px height 250px padding 13px 问题是用户可以编辑图像大
  • $_SESSION 中保存大量信息可以吗?

    我需要存储许多数组 SESSION以防止从 MySQL 检索信息 可以吗 其中 太多 的信息有多少 SESSION还是没有 太多 谢谢 附 或者更好地使用http php net manual en book memcache php ht
  • NodeJS 和 PHP (Laravel) 集成用于 Socket.IO 实时聊天

    目前我有一个我写过的网站PHP通过Laravel 框架 我已经使用写了一个实时聊天nodeJS with 套接字IO and Express现在我想做的是将它集成到我已经编写的 Laravel 网站中 问题是聊天必须在主页中 当前由 Lar
  • PHP - 查找和比较日期

    你好 我有 foreach 我可以在其中获取数据库中的事件数据 我使用数据库中的日期名称 例如 event date 我需要在一个 div 中比较具有相同日期和输出的操作 例如我有这个事件 活动一 9 月 13 日 活动二 9 月 1 日
  • PHP 除法浮点值问题

    当我尝试获取余数时 它给出了无效值 我试图获得两位小数的余数 我得到 3 4694469519536E 18 我的价值观是 x 0 1 y 0 005 我尝试了以下方法 echo ed fmod 0 1 0 005 OutPut 3 469
  • 处理查询字符串参数时 Codeigniter 缓存问题

    问候 我正在编写一个 CI Web 应用程序 它实现标准文件缓存功能 如下所示 this gt output gt cache n 我使用了段和查询字符串参数的组合 因此似乎遇到了问题 我在用例和输出类代码中看到的是 缓存仅基于段 像这样

随机推荐

  • 使用 javascript 压缩所有表单数据

    我想压缩一个包含超过 1000 个变量的巨大 HTML 表单中的所有数据 以规避 5 3 9 之前的 PHP 版本中的 max input vars 限制 如何使用 javascript 读取 HTML 表单中的所有数据 将其序列化 或创建
  • 从命令行编译 CUDA 代码

    我正在尝试使用以下语法从命令行编译 CUDA 代码 nvcc c MyFile cu ccbin C Program Files x86 Microsoft Visual Studio 10 0 VC bin 我安装了 CUDA Toolk
  • 如何在cakephp中循环创建pdf文件?

    我已经实现了pdf创建 http bakery cakephp org articles kalileo 2010 06 08 creating pdf files with cakephp and tcpdf 但按照我的逻辑 有一个链接
  • 从tinyMCE中的插入符位置删除x个字符

    我正在开发一个项目 用户可以输入特殊字符 然后按 Tab 键自动完成值 这部分大部分工作正常 但我希望能够从插入符位置之前删除 x 个字符 例如 如果 是插入符号 我有以下文本 chr 我希望能够删除光标位置之前的 3 个字符 例如我最终会
  • 使用 flags() 创建一个 QTableWidgetItem

    我不明白 QTableWidgetItem Chapter 中的 Qt5 文档 我无法获得正确的参数来将新创建的表格单元设置为可编辑 我有这段代码 for i item in enumerate event desc start 0 pri
  • 如何消除结构体数据成员之间的填充字节

    我有一个带有 消息 的二进制文件 我试图使用结构将字节放入正确的变量中 在我的示例中 我使用了两种类型的消息 Tmessage 和 Amessage include
  • 具有 X 和 Y 值对的数据

    是否可以在中使用 X 和 Y 对dataChart js 中用于创建条形图的选项 data 08 09 2016 12 09 09 2016 19 形式为 X Y 我在文档中没有找到任何关于它的参考 我越接近 发现这个折线图示例 data
  • 如何使用 Selenium 和 Java 通过 CSS 选择器以记分牌格式 Web 元素打印击球手的得分

    我想使用 CSS 选择器在 selenium 中打印板球比赛期间所有击球手的得分 所有行都有相同的类名 并且运行位于第三行 因此我使用 CSS 选择器仅选择第三行 但我无法打印运行 这是我的代码 package SomeBasicAutom
  • 短名称仅适用于 C 盘

    我正在尝试在 Windows 上查找路径的短名称 由于某种原因 以下命令仅在 C 驱动器上运行时才有效 for d I in do echo sI 我想要我的 D 驱动器上的文件夹的简称 检查其他驱动器是否启用了 8 3 表示法 http
  • Do...循环直到具有多个条件

    我有一个简单的问题 我在网上没有找到具体信息 我想表演一个Do Loop Until循环 但我想在末尾插入多个条件 我想要做 Do my code Loop Until Condition 1 And Condition 2 And And
  • 更改 Sweave 中 ggplot2 图的大小,而不使文本/数字过大

    我找到了这个question关于更改 Sweave 中 ggplot2 图的大小 我添加了Sweaveopts width 3 height 3 它确实缩小了绘图的大小 但并没有缩小文本 所以最后 轴上的所有数字都会重叠 有没有办法在 Sw
  • 插入的图像未显示在 Google 电子表格中

    当我尝试使用下面的代码在 Google 电子表格中插入图像时 它的工作正常 var activeSheet SpreadsheetApp getActiveSpreadsheet getActiveSheet var image activ
  • 什么是间接扩展? ${!var*} 是什么意思?

    我正在阅读 Bash 初学者指南 它说 如果第一个字符为PARAMETER是一个感叹号 Bash 使用由其余部分形成的变量值PARAMETER作为变量的名称 然后扩展该变量 并在其余替换中使用该值 而不是PARAMETER本身 这称为间接扩
  • 如何解决android studio中无法找到adb(IllegalArgumentException)的问题? [复制]

    这个问题在这里已经有答案了 从 2 2 更新到 2 3 后 我无法使用 android studio 运行我的项目 当我尝试运行我的项目时 我总是收到 无法找到 adb 之类的错误 给我一个正确的解决方案来解决这个问题 我尝试了很多方法但无
  • 两个接口有相同的方法

    Interface A int Add int a int b Interface B int Add int a int b Class D A B int Add int a int b return a b 代码工作正常并且没有产生任
  • 角度 8 中的延迟加载模块

    我有一个仪表板应用程序 我在其中延迟加载小部件 不绑定到路线 我是通过定义一个对象来做到这一点的 name string loadChildren string 然后在我的app module我会做provideRoutes 这将导致 cl
  • 如何将非常大的 CSV 数据集加载到 d3 中

    正如标题所示 我有一个 CSV 文件 250mb 和 700k 行 我无法将其加载到 d3 中 我尝试按照通常加载 csv 文件的方式加载它 但没有成功 目前 它不会出错 并且我在控制台中得到一个空数据数组 不确定文件是否太大或者我加载不正
  • Django,独特的字段生成

    我有一个促销模型 其中包含促销代码和购买模型类的外键 这是模型 class Promotion models Model purchase models ForeignKey Purchase promotion code models C
  • Python sys.getrefcount() 显示意外的第四个引用

    我正在寻找有关为什么我有意外引用计数的解释 是的 我已经知道了sys getrefcount 将增加预期计数1 这不是下面发生的事情 我期待这个功能test a 以显示3 not 4 第四个参考来自哪里 In 2 import sys In
  • 如何使用 Symfony Forms 将事件侦听器添加到动态添加的字段

    我正在使用事件侦听器来动态修改表单 我想向动态添加的字段添加另一个事件侦听器 我不知道如何实现这一点 public function buildForm FormBuilderInterface builder array options