2

我必须将自定义选项传递给 symfony 表单。我一步一步按照文档设置,但我的选项不会通过。

表单类型

class AdvertType extends AbstractType
{
    /**
     * {@inheritDoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $entityManager = $options['em'];
    }

    /**
     * {@inheritDoc}
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {    
        $resolver->setRequired(array(
            'em',
        ));

        $resolver->setAllowedTypes(array(
            'em' => 'Doctrine\Common\Persistence\ObjectManager',
        ));
    }

    /**
     * {@inheritDoc}
     */
    public function getName()
    {
        return 'advert';
    }
}

这是来自控制器的代码。

$form = $this->createForm(new AdvertType(), new Advert(), array(
    'em' => $this->getDoctrine()->getManager(),
));

emSymfony 会抛出我的选项丢失的异常。

例外:缺少必需的选项“em”。

我按照教程添加了一个数据转换器:http ://symfony.com/doc/current/cookbook/form/data_transformers.html

我清除了缓存并重新启动了我的网络服务器,但没有任何效果。我做错了什么?我是否错过了通过我的配置$options?看起来$options我传递的控制器中的数组永远不会到达该buildForm方法。

我正在使用 Symfony v2.3.5。为了测试我更新到最新(2.3.6),但问题仍然存在。

干杯。

4

2 回答 2

3

我已经复制了您的代码并成功使用了它(Symfony 2.3.6)。有效!您不必清除缓存。所以我不确定出了什么问题。data_class如果您想将表单约束到您的 Advert 对象,您还应该考虑在解析器中添加选项,例如

    $resolver
        ->setDefaults(array(
            'data_class' => 'Your\Bundle\Entity\Advert',
        ))
    ;
于 2013-10-31T11:05:09.227 回答
1

我使用了我的表单两次(以不同的方式),所以错误是由错误的使用引起的。我在错误的地方寻找错误。一般的代码是正确的。对此感到抱歉。

于 2013-10-31T11:43:19.140 回答