// buildForm
...
->add('book', 'entity', [
'class' => 'MyBundle\Entity\Book',
'choices' => [],
])
->addEventSubscriber(new MySubscriber());
现场手册通过javascript填写并获得该书的标题。 我需要做的是检查我的数据库中是否已存在该书,否则我创建它。我创建了一个适合的用户。
问题在于我无法摆脱$form->handleRequest($request)->isValid()
发出的错误,这很奇怪,因为我在订阅者中以这种方式编辑了数据:
public function preSetData(FormEvent $event)
{
...
$author = $event->getData();
$requestForm = $this->request->request->get('mybundle_author');
$bookTitle = $requestForm['book'];
// if this book title doesn't exist -> create it
...
$requestForm['book] = (string) $book->getId();
$this->request->request->set('mybundle_author', $requestForm);
}
无论我使用的FormEvents
是什么,它都会发出图书价值无效的错误
答案 0 :(得分:0)
我遇到了与entity
类型相似的问题。
问题是新实体未标记为托管,实体类型侧重于选择现有实体。您可以将ObjectManager
传递给订阅者并将实体设置为托管(带有持久性),或者自己去掉验证错误。后者更清洁,但可能需要更多工作。
答案 1 :(得分:0)
删除选项选项可解决问题。 我的订阅者是正确的,但在我的表单中,我必须编辑字段
// buildForm
...
->add('book', 'entity', [
'class' => 'MyBundle\Entity\Book',
//'choices' => [], // removing this fixed the problem
])
->addEventSubscriber(new MySubscriber());