1

我正在做一些与这个食谱示例非常相似的事情http://symfony.com/doc/current/cookbook/form/dynamic_form_generation.html#adding-an-event-subscriber-to-a-form-class

主要区别在于我的字段类型是实体而不是文本类型。

所以我的字段订阅者 preSetData 方法如下所示:

public function preSetData(DataEvent $event)
{
    $data = $event->getData();
    $form = $event->getForm();

    if (null === $data) {
        return;
    }

    if(!$data->getIsCategorized()){

        $form->add(

            $this->factory->createNamed('categories', 'entity', array(
            'class' => 'My\PostBundle\Entity\Category',
            'property'     => 'name',
            'multiple'     => true,
            'label' => 'Category'
            )
            )
        );
    }
}

这给出了以下错误

Class does not exist
500 Internal Server Error - ReflectionException 

如果我直接在我的表单类型中添加实体,$builder->add('categories, 'entity', array(...它可以正常工作

是否可以以这种方式使用字段事件订阅者将实体字段类型附加到表单?

4

2 回答 2

1

我遇到了同样的问题,实际上是因为factory->createNamed()方法比 builder-> add方法有更多参数 。第三个参数不是选项数组,而是一个“数据”参数。

所以这是你应该做的:

    $form->add(

        $this->factory->createNamed('categories', 'entity', null, array(
        'class' => 'My\PostBundle\Entity\Category',
        'property'     => 'name',
        'multiple'     => true,
        'label' => 'Category'
        )
        )
    );

(在选项数组之前添加 null)

于 2012-08-02T12:02:56.713 回答
0

无论您是在类型中附加字段还是通过事件侦听器/订阅者附加字段都应该没有区别。要么你在某个地方(可能)有一个小错误,要么这是一个错误,在这种情况下,你应该将它提交给问题跟踪器

于 2012-07-27T08:46:50.323 回答