здесь мое поле формы имени (имя является обязательным и не может быть пустым или пустым):
->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;
}