Forms Sf2表格-$form->;getData()返回数组而不是实例,而defaultOptions';数据类';设置

Forms Sf2表格-$form->;getData()返回数组而不是实例,而defaultOptions';数据类';设置,forms,symfony,Forms,Symfony,我的Symfony表单有问题 我在formType类中指定data_类,如下所示: <?php namespace myCompany\myBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolverInterface; use

我的Symfony表单有问题

我在formType类中指定data_类,如下所示:

    <?php

namespace myCompany\myBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use myCompany\myBundle\Entity\someEntity;


class someType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        //here my form builder. No problem there...
    }

    public function getName()
    {
        return 'aNameForTheServiceToBeCalled';
    }

    public function setDefautOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'myCompany\myBundle\Entity\someEntity',
            'empty_data' => new someEntity()
        ));
    }
}
然后,在某个时刻,我希望获取已发布的表单数据,因此我会:

$data = $form->getData();
根据Symfony API文件:

公共混合getData(): 以基础对象所需的格式返回数据

所以我希望$data是某个实体的实例

但显然我错了,因为我试图$em->persist($data);我收到一个错误,说:

EntityManager#persist()希望参数1是给定数组的实体对象

显然,$data是一个数组,是某个实体的实例。 提前谢谢你的帮助

-------------------------- NB. 我知道,而不是打电话

$form=$this->createForm('aNameForTheServiceToBeCalled');
通过控制器,我可以执行以下操作:

$someEntity = //... new instance of someEntity, or from a repository, or whatever someEntity managerslike service
$form=$this->createForm('aNameForTheServiceToBeCalled', $someEntity);
但这正是我不想做的….

我有一个打字错误:

 public function setDefautOptions(OptionsResolverInterface $resolver)
应该是

 public function setDefau**l**tOptions(OptionsResolverInterface $resolver)
我失踪了。。。 浪费两个小时什么都不做。。。 谢谢大家

我有一个打字错误:

 public function setDefautOptions(OptionsResolverInterface $resolver)
应该是

 public function setDefau**l**tOptions(OptionsResolverInterface $resolver)
我失踪了。。。 浪费两个小时什么都不做。。。
谢谢大家

太好了,就这样setDefaultOptions是必需的,但自Symfony 2.6以来已被弃用,并将从3.0中删除,以支持configureOptions

下面是一个技巧,可以让您顺利地从Symfony 2.X过渡到Symfony 3.0及更高版本:

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $this->configureOptions($resolver);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => YOUR_ENTITY_OR_MODEL_CLASS::class,
            'attr' => array(
                'id' => $this->getName()
            ),
            'custom_parameters' => [] // Set a Variable that will allow to pass custom parameters from a controller to the type
        ));
    }

太好了,就这样setDefaultOptions是必需的,但自Symfony 2.6以来已被弃用,并将从3.0中删除,以支持configureOptions

下面是一个技巧,可以让您顺利地从Symfony 2.X过渡到Symfony 3.0及更高版本:

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $this->configureOptions($resolver);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => YOUR_ENTITY_OR_MODEL_CLASS::class,
            'attr' => array(
                'id' => $this->getName()
            ),
            'custom_parameters' => [] // Set a Variable that will allow to pass custom parameters from a controller to the type
        ));
    }

为什么不
->createForm('aNameForTheServiceToBeCalled',newsomeEntity())数组包含什么?为什么不->createForm('aNameForTheServiceToBeCalled',new SomeEntity());->>因为这正是我想要避免的,数组包含什么?-->它以数组('field\u name'=>'field\u value')的方式包含所有表单字段,就好像没有指定数据类一样……symfony2文档说,如果提供数据类属性,默认情况下,如果没有传递,它将接受一个新实例,因此可能是空的\u数据属性。是否过时或导致奇怪的行为为什么不
->createForm('aNameForTheServiceToBeCalled',new SomeEntity())数组包含什么?为什么不->createForm('aNameForTheServiceToBeCalled',new SomeEntity());->>因为这正是我想要避免的,数组包含什么?-->它以数组('field\u name'=>'field\u value')的方式包含所有表单字段,就好像没有指定数据类一样……symfony2文档说,如果提供数据类属性,默认情况下,如果没有传递,它将接受一个新实例,因此可能是空的\u数据属性。过时或导致奇怪的行为