Symfony 4. * Установка значений полей в контроллере и предотвращение ошибки проверки: это значение не должно быть нулевым - PullRequest
1 голос
/ 21 апреля 2019

Я использую Symfony 4.2.3. У меня есть объект с именем Article, который имеет среди прочего следующие поля:

  • версия
  • versionUserId
  • versionTimestamp

с * @Assert\NotNull проверочным знаком.

Я хочу установить значение этих полей вручную в контроллере, например. с помощью:

$article->setVersionUserId($user);
                $article->setVersionTimestamp(new \DateTime());
                $article->setVersion(1);

Однако, как я понимаю $form->isValid(), проверяет объект, а не форму. Таким образом, чтобы предотвратить This value should not be null. ошибку проверки , я должен установить значение этих полей перед проверкой формы. Как этого добиться?


Мой контроллер:

  public function article_edit($action, Request $request)
        {
    $form = $this->createForm(ArticleType::class);  

        // Customize the form
        $form->remove("versionTimestamp");
        $form->remove("versionUserId");
        $form->remove("version");
        $form->add('save', SubmitType::class, ['label' => 'Zapisz']);

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
        $article = $form->getData();
            /*
                $article->setVersionUserId($user);
                $article->setVersionTimestamp(new \DateTime());
                $article->setVersion(1);
            */
/.../

Ответы [ 2 ]

2 голосов
/ 21 апреля 2019

Как прокомментировал Омар Маклед, группы проверки являются одним из способов достижения этого.TBH, я бы предпочел другой подход:

$article = new Article();
$article->setVersionUserId($user);
$article->setVersionTimestamp(new \DateTime());
$article->setVersion(1);

$form = $this->createForm(ArticleType::class, $article); // <- preset
$form->add('save', SubmitType::class, ['label' => 'Zapisz']);

if ($form->isSubmitted() && $form->isValid()) {
    $article = $form->getData();
    // do other stuff...
}

(примечание: вызывать поле userId странно, когда вы назначаете ему пользователя, но это только я)

0 голосов
/ 21 апреля 2019

Я думаю, что событие preSubmit - лучший способ достичь того, что вы хотите https://symfony.com/doc/current/form/events.html

...