Symfony2 - Как передать объект в скрытую форму ввода

Возможный дубликат:
передать значение в скрытое поле в форме

Я знаю идентификатор объекта, который я хочу передать через скрытый ввод формы. В newAction у меня есть ID, либо я могу получить объект из репозитория.

Организация:

/**
 * @var object $target
 *
 * @ORM\ManyToOne(targetEntity="Acme\TestBundle\Entity\Target")
 * @ORM\JoinColumn(name="target_id", referencedColumnName="id", nullable=false)
 */
private $target;

Тип формы:

->add('target', 'hidden', array('property_path' => 'target.id'))

In newAction I do:

$target = $em->...->find($id);
$entity->setTarget($target);

Но когда я упорствую, я получаю сообщение об ошибке:

Warning: spl_object_hash() expects parameter 1 to be object, string given(...)

Что я делаю неправильно?


person cadavre    schedule 22.10.2012    source источник
comment
Я не думаю, что это дубликат связанного вопроса. Речь идет о передаче данных объекта через скрытые поля, проблема, с которой я тоже сталкиваюсь прямо сейчас. Связанный вопрос об основах скрытых полей не имеет к этому никакого отношения.   -  person Kaivosukeltaja    schedule 17.02.2014
comment
Если нам повезет, HiddenEntityType скоро попадет в Symfony: github.com/symfony/symfony /вопросы/8293   -  person webDEVILopers    schedule 27.11.2014


Ответы (1)


Вам не нужно передавать скрытую переменную ID для создания отношения.

Если вам нужно настроить значения по умолчанию, вы должны сделать это для сущности, прежде чем передавать ее в форму.

$target = $em->...->find($id);

$entity = new MyEntity;
$entity->setTarget($target);

$this->createForm(new MyFormType(), $entity);

Тогда вашей форме никогда не придется беспокоиться о цели, она уже установлена ​​в вашей новой сущности, если вы решите ее создать.

person noetix    schedule 22.10.2012
comment
Если я это сделаю, я получу: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'target_id' cannot be null - person cadavre; 23.10.2012
comment
Не могли бы вы вставить свое полное действие контроллера? Вы отправляете сообщение в другое действие? - person noetix; 23.10.2012
comment
Просто: $entity = new Comment(); $entity->setTarget($target); $form = $this->createForm(new MyFormType(), $entity); $form->createView() В моем MyFormType остались только редактируемые поля. - person cadavre; 23.10.2012
comment
Если я не ошибаюсь, это то, что делают преобразователи данных, я прав? :) Но это так невозможно вертится по кругу... - person cadavre; 23.10.2012
comment
Вы можете использовать преобразователь данных, но зачем беспокоиться, если вы можете просто отправить сообщение по тому же URL-адресу, который уже имеет ваш целевой идентификатор. Ваш код действия не привязывает и не сохраняет какие-либо данные, поэтому я могу только предположить, что вы отправляете сообщение для другого действия, не могли бы вы обновить исходное сообщение с подробностями. - person noetix; 23.10.2012
comment
Да, вы были правы, я на самом деле не знаю, почему я использовал два разных действия контроллера... - person cadavre; 23.10.2012