Symfony 4 мой метод установки все еще вызывается с пустым значением, даже если я добавил ограничение NotBlank () - PullRequest
0 голосов
/ 15 октября 2018

здесь мое поле формы имени (имя является обязательным и не может быть пустым или пустым):

        ->add('name', TextType::class, [
            'constraints' => [
                new NotBlank(),
                new NotNull()
            ]
        ])

Я ожидал, что ограничение NotBlank() прекратит вызывать мой метод установки в сущности User, метод здесь:

 /**
 * @param string $name
 *
 * @return User
 */
public function setName(string $name): User
{
    $this->name = $name;

    return $this;
}

Но если я оставлю ввод моего имени пустым, он по-прежнему вызывает setName() метод с нулевым значением, и он прерывается, как можно заставить его прекратить вызывать метод setName(), если поле было пустым?

Вот действие контроллера:

 /**
 * @param Request                      $request
 * @param UserService                  $userService
 * @param UserPasswordEncoderInterface $encoder
 * @param TranslatorInterface          $translator
 *
 * @Route("/index", name="profile")
 * @Security("is_granted('ROLE_USER')")
 *
 * @return \Symfony\Component\HttpFoundation\Response
 * @throws \Exception
 */
public function index(
    Request $request,
    UserService $userService,
    UserPasswordEncoderInterface $encoder,
    TranslatorInterface $translator)
{
    $user = $this->getUser();

    $form = $this->createForm(ProfileType::class, $user);
    $form->handleRequest($request);

    if($form->isSubmitted() && $form->isValid()) {
        if($user->getNewPassword()) {
            $user->setPassword($encoder->encodePassword($user, $user->getNewPassword()));
        }
        $user->setUpdatedAt(new \DateTime('now'));
        $userService->update($user);
        $this->addFlash('notice', $translator->trans('profile.settings_saved'));
    }

    return $this->render('user/profile/profile.html.twig', [
        'form' => $form->createView()
    ]);
}

Метод обновления UserService:

 /**
 * @param mixed $entity
 * @param bool  $flush
 *
 * @return mixed
 *
 * @throws \Exception
 */
public function update($entity, bool $flush = true)
{
    try {
        $this->persist($entity);

        if ($flush) {
            $this->flush();
        }

        $this->dispatchAction('updated', $entity);
    } catch (\Exception $e) {
        throw $e;
    }

    return $entity;
}

Метод DispachAction:

    /**
 * @param string $action
 * @param mixed  $entity
 *
 * @return bool
 */
private function dispatchAction(string $action, $entity)
{
    if (array_key_exists($action, $this->events)) {
        $event = $this->events[$action];
        $this->dispatchEvent(new $event($entity));

        return true;
    }

    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...