Doctrine orm Symfony2表格嵌入实体问题

Doctrine orm Symfony2表格嵌入实体问题,doctrine-orm,symfony,symfony-forms,Doctrine Orm,Symfony,Symfony Forms,我的表单中有两个对象,一个场景和它的背景。页面的大部分是新的场景的表单,我有一个角落,有一个缩略图和一个文件输入字段。每当更改文件字段时,它都会将图像上载到服务器,在服务器上创建并保存后台实体。然后它返回实体的Id,我将其存储在表单中的一个隐藏字段中 当我提交此文件时,它告诉我,我正试图在场景#setBackground方法中存储一个字符串。如果我从SceneType表单类中的background字段中删除hidden属性,它将呈现一个框,一切正常。我添加了hidden属性,并发布了相同的数据,

我的表单中有两个对象,一个
场景
和它的
背景
。页面的大部分是新的
场景的表单
,我有一个角落,有一个缩略图和一个文件输入字段。每当更改文件字段时,它都会将图像上载到服务器,在服务器上创建并保存
后台
实体。然后它返回实体的
Id
,我将其存储在表单中的一个隐藏字段中

当我提交此文件时,它告诉我,我正试图在
场景#setBackground
方法中存储一个字符串。如果我从
SceneType
表单类中的
background
字段中删除
hidden
属性,它将呈现一个
框,一切正常。我添加了
hidden
属性,并发布了相同的数据,我得到了上面的错误

SceneType:

class SceneType extends AbstractType {
    public function getName () {
        return 'scene';
    }

    public function buildForm (FormBuilder $builder, array $options) {
        $builder->add('name');
        $builder->add('description');
        $builder->add('panoramic', null, array('required' => false));
        $builder->add('revealable', null, array('required' => false));
        $builder->add('left', 'hidden');
        $builder->add('right', 'hidden');
        $builder->add('background', 'hidden');
    }
}
实体\场景的相关部分:

class Scene {
    /**
     * @ORM\OneToOne(
     *      targetEntity="Company\ProductBundle\Entity\Scene\Background",
     *      inversedBy="scene"
     * )
     * @ORM\JoinColumn(
     *      name="scene_background_id",
     *      referencedColumnName="id",
     *      nullable=false,
     *      onDelete="cascade",
     *      onUpdate="cascade"
     * )
     */
    protected $background;
    public function getBackground () {
        return $this->background;
    }
    public function setBackground (Background $background) {
        $this->background = $background;
    }
}
错误消息:

Catchable Fatal Error: Argument 1 passed to 
Company\ProductBundle\Entity\Scene::setBackground() must be an instance of 
Company\Company\Entity\Scene\Background, string given, called in 
/srv/http/symulator/vendor/symfony/src/Symfony/Component/Form/Util/PropertyPath.php
on line 346 and defined in 
/srv/http/symulator/src/Noinc/SimulatorBundle/Entity/Scene.php line 143
我的表单中有两个对象,一个场景和它的背景。这个 页面的大部分是新场景的表单,我有一个 有缩略图和文件输入字段的角落。每当 文件字段更改后,它将图像上载到 创建并持久化后台实体。然后,场景变得更加清晰 与此背景相关。现在,背景设置好了,我只需要 需要担心通过表单修改场景的属性

我不认为在形式上传递隐藏的id是必要的;您应该能够在表单之外保持该关联。希望你考虑这个方法。< /P> 如果必须使用自己的方式,则需要创建BackgroundType表单,然后将该表单添加到SceneType表单中:

$builder->add('background', new BackgroundType());
我假设BackgroundType()将呈现一个隐藏的id字段