我有一个类型的Symfony2表单字段collection,其中集合项是entity类型.我使用Symfony 2.7.
到目前为止它仍然有效,但在这种情况下,我必须将模型数据转换器应用于Symfony Cookbook中描述的那些集合项.我使用这段代码:
<?php
$builder
->add(
$builder
->create('items', 'collection', array(
'type' => 'entity',
'options' => array(
'class' => 'AppBundle:Item',
'property' => 'name',
'label' => 'Item',
),
'label' => 'Items',
'allow_add' => true,
'allow_delete' => true,
'delete_empty' => true,
'prototype' => true,
'required' => false,
))
// $options['em'] is the entity manager
->addModelTransformer(new ItemToNumberTransformer($options['em']))
)
;
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会将模型转换器应用于整个集合,而不是它的一个Item项.作为一种解决方法,我修改了变换器以使用项目/ ID的数组而不是仅使用单个项目/ id,但是这种类似于处理它的错误位置.在我看来好像这更像是一个语法问题.
有人知道如何将模型变换器应用于集合的每个项目吗?或者任何人都证实,由于Symfony框架中的限制,这根本不可能实现?
我有一个Symfony2表单,有两个分层的动态字段.第一层在使用表单事件实现记录的方式时没有问题:http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#dynamic-generation-for-submitted-forms
但接下来是第三个字段,它取决于第二个字段,它已经是一个动态字段.
为了演示这个问题,这里是我的剥离代码:
<?php
class ServiceeventType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('park', 'entity', array(
'class' => 'AppBundle:Park',
'property' => 'identifyingName',
'label' => 'Park',
'required' => true,
'invalid_message' => 'Choose a Park',
'placeholder' => 'Please choose',
))
// just a placeholder for the $builder->get('facility')->addEventListener to have something to bind to
// I'm aware, that this is just a symptom of my problem …Run Code Online (Sandbox Code Playgroud)