通过订阅者动态编辑表单
Edit form dynamically through subscriber
// 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
,它都会发出账面价值无效的错误
我用 entity
类型遇到了类似的问题。
问题是新实体没有被标记为托管,实体类型侧重于选择现有实体。您可以将 ObjectManager
传递给订阅者并将实体设置为托管(使用持久化),或者您自己消除验证错误。后者更干净,但可能需要更多工作。
删除选项选项解决了问题。
我的订户是正确的,但在我的表格中我必须编辑字段
// buildForm
...
->add('book', 'entity', [
'class' => 'MyBundle\Entity\Book',
//'choices' => [], // removing this fixed the problem
])
->addEventSubscriber(new MySubscriber());
// 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
,它都会发出账面价值无效的错误
我用 entity
类型遇到了类似的问题。
问题是新实体没有被标记为托管,实体类型侧重于选择现有实体。您可以将 ObjectManager
传递给订阅者并将实体设置为托管(使用持久化),或者您自己消除验证错误。后者更干净,但可能需要更多工作。
删除选项选项解决了问题。 我的订户是正确的,但在我的表格中我必须编辑字段
// buildForm
...
->add('book', 'entity', [
'class' => 'MyBundle\Entity\Book',
//'choices' => [], // removing this fixed the problem
])
->addEventSubscriber(new MySubscriber());