Symfony2 Форма встроенной сущности выпуска - PullRequest
4 голосов
/ 12 августа 2011

У меня есть два объекта в моей форме, Scene и его Background.Большая часть страницы - это форма для нового Scene, и у меня есть угол, где есть миниатюра и поле для ввода файла.Всякий раз, когда поле файла изменяется, оно загружает изображение на сервер, где создается и сохраняется объект Background.Затем он возвращает Id сущности, которую я храню в скрытом поле в форме.

Когда я отправляю это, он говорит мне, что я пытаюсь сохранить строку в Scene#setBackgroundметод.Если я удаляю атрибут hidden из поля background в классе формы SceneType, он отображает поле <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

1 Ответ

2 голосов
/ 12 августа 2011

У меня есть два объекта в моей форме, сцена и ее фон.Большая часть страницы - это форма для новой сцены, и у меня есть угол, где есть миниатюра и поле для ввода файла.Всякий раз, когда поле файла изменяется, оно загружает изображение на сервер, где создается и сохраняется фоновая сущность.Затем сцена связывается с этим фоном.Теперь, когда задан фон, мне нужно беспокоиться только об изменении свойств моей сцены через форму.

Я не думаю, что передача скрытых идентификаторов в формах необходима;Вы должны быть в состоянии сохранить эту связь вне формы.Надеюсь, вы рассмотрите этот подход.

Если вы должны использовать свой путь, вам нужно будет создать форму BackgroundType, а затем добавить эту форму в форму SceneType:

$builder->add('background', new BackgroundType());

Я предполагаюЗатем BackgroundType () отобразит скрытое поле идентификатора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...