如何将自定义选项传递给Symfony表单

时间:2013-10-31 09:52:53

标签: php symfony

我要将自定义选项传递给symfony表单。我按步骤跟踪文档setp,但我的选项不会通过。

FormType

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(),
));

Symfony会抛出我的选项em缺失的异常。

  

异常:缺少必需的选项“em”。

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

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

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

干杯。

2 个答案:

答案 0 :(得分:3)

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

    $resolver
        ->setDefaults(array(
            'data_class' => 'Your\Bundle\Entity\Advert',
        ))
    ;

答案 1 :(得分:1)

我使用了我的表单两次(以不同的方式),因此错误的使用会导致错误。我找错了错误的地方。一般来说代码是正确的。对不起。