通过订阅者

时间:2016-02-02 10:53:22

标签: forms symfony symfony-forms

// 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是什么,它都会发出图书价值无效的错误

2 个答案:

答案 0 :(得分:0)

我遇到了与entity类型相似的问题。

问题是新实体未标记为托管,实体类型侧重于选择现有实体。您可以将ObjectManager传递给订阅者并将实体设置为托管(带有持久性),或者自己去掉验证错误。后者更清洁,但可能需要更多工作。

答案 1 :(得分:0)

删除选项选项可解决问题。 我的订阅者是正确的,但在我的表单中,我必须编辑字段

// buildForm
...
->add('book', 'entity', [
    'class' => 'MyBundle\Entity\Book',
    //'choices' => [], // removing this fixed the problem
])
->addEventSubscriber(new MySubscriber());