首页 > 解决方案 > Symfony:在带有集合元素的表单中获取实体 id

问题描述

我正在设置一个带有 Collection 元素的表单。我按照文档中的描述设置原型

我已将我的 javascript 设置为管理动态添加/删除部分。

但我想将已保存元素的实体 ID 作为数据元素 ID 添加,因为如果某些字段发生更改,我想对已保存的集合元素执行 ajax 检查(在表单填写期间,而不是在提交阶段)。所以我需要将实体 id 提供给 DOm 以传递给数据。

<form ...>

<ul class="tariffAdjustments ulprototype" data-prototype="{{ protos.tariffAdjustment_prototype(form.tariffAdjustments.vars.prototype)|e('html_attr') }}">
  {% for tariffAdjustment in form.tariffAdjustments %}
  <li class="eltariffadjustment" data-taid="XXX">
    {# can't retrieve the element id #}{{dump(form.tariffAdjustments.vars)}}
    {{ protos.tariffAdjustment_prototype(tariffAdjustment)|raw }}
  </li>
  {% endfor %}
</ul>

</form>

{{dump(form.tariffAdjustments.vars)}}我有:

FormView {#18167 
  +vars: array:30 [
    "value" => PersistentCollection {#9714}
    "form" => FormView {#18167}
    "id" => "module_entity_tariffAdjustments"
    ...
    "prototype" => FormView {#18189 ▼
      +vars: array:27 [▼
        "id" => "module_entity_tariffAdjustments___name__"
        ...
      ]
      +parent: FormView {#18167}
      +children: array:10 []
        "name" => FormView {#18192}     <= entity field exposed in the FormType
        "startDate" => FormView {#18197}
        ...
      -rendered: false
    }
  ]
  +parent: FormView {#8546 ▶}
  +children: array:3 [▼
    0 => FormView {#18336 ▼
      +vars: array:27 [▼
        "value" => TariffAdjustment {#9798 ▼
          -id: 154      <= what i'm looking for
          ...
        }
        ...
      ]
      +parent: FormView {#18167}
      +children: array:10 []
      -rendered: false
    }
    1 => FormView {#18338 ▼
      +vars: array:27 [▼
        "value" => TariffAdjustment {#9798 ▼
          -id: 172      <= what i'm looking for
          ...
        }
        ...
      ]
      +parent: FormView {#18167}
      +children: array:10 []
      -rendered: false
    }
  ]
  -rendered: false
}

我的实体 ID 显然不在我的 FormType 中:我不想设置它。


编辑

主要形式

class ModuleType extends AbstractType
{
  public function buildForm(FormBuilderInterface $builder, array $options)
  {
    $em = $options['entity_manager'];
    $builder
      ->add('tariffAdjustments', CollectionType::class, [
        'label' => 'module.tariffAdjustments',
        'required' => false,
        'attr' => [
          'class' => 'collectiondata',
        ],
        'constraints' => new Valid(),
        'entry_type' => TariffAdjustmentType::class,
        'entry_options' => ['entity_manager' => $em],
        'by_reference' => false,
        'allow_add' => true,
        'allow_delete' => true,
      ]);
  }
}

和收集表格

class TariffAdjustmentType extends AbstractType
{

  public function buildForm(FormBuilderInterface $builder, array $options)
  {
    $em = $options['entity_manager'];
    $builder
      ->add('name', TextType::class, [
        'label' => 'name',
        'label_attr' => ['class' => 'mandatory'],
        'required' => true,
      ]);
    ...
  }
}

也许我错过了一些明显的东西,但我找不到什么。谢谢

标签: formssymfonytwig

解决方案


我多么愚蠢:

我正在设置{{dump(form.tariffAdjustments.vars)}} ,但由于我在循环中,我只需要设置:tariffAdjustment.vars.value.id这是我寻找的实体的 id。


推荐阅读