私のフォームには、Scene
とそのBackground
の2つのオブジェクトがあります。ページの大部分は新しいScene
のフォームであり、サムネイルとファイル入力フィールドがあるコーナーがあります。ファイルフィールドが変更されると、画像はサーバーにアップロードされ、Background
エンティティが作成され、保持されます。次に、エンティティのId
を返します。エンティティはフォームの非表示フィールドに格納されます。Symfony2フォームエンベデッドエンティティの問題
これを提出すると、Scene#setBackground
メソッドで文字列を格納しようとしていることがわかります。 SceneType
フォームクラスのbackground
フィールドからhidden
属性を削除すると、<select>
ボックスがレンダリングされ、すべて正常です。 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');
}
}
Relevant section of Entity\Scene:
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;
}
}
Error message:
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