【问题标题】:Symfony : get entities id in a form with collection elementSymfony:在带有集合元素的表单中获取实体 id
【发布时间】:2019-01-16 10:48:05
【问题描述】:

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

我已设置我的 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,
      ]);
    ...
  }
}

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

【问题讨论】:

  • 请添加表单的后端代码,而不是 FormView 的转储,它不是很有用。如果您不使用 ID 作为选择值,则可以将其添加为附加参数。看symfony.com/doc/current/reference/forms/types/…
  • 我已经用代码更新了我的问题

标签: forms symfony twig


【解决方案1】:

我是多么愚蠢:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    相关资源
    最近更新 更多