Мои формы стандартные, за исключением кнопки отправки
{{ form_start(form) }}
{{ form_widget(form) }}
<input type="submit" value="{{ 'action.save'|trans }}" formnovalidate />
{{ form_end(form) }}
Я отключил проверку html5 с помощью «formnovalidate» в кнопке отправки, потому что, например, здесь (Entity User)
/**
* @ORM\Column(type="string")
* @Assert\NotBlank(message="assert.notblanc")
* @Assert\Length(
* min = 2, minMessage = "assert.minmessage",
* max = 50, maxMessage = "assert.maxmessage"
* )
*/
private $fullName;
было только простое сообщение «Пожалуйста, укажите требуемый формат» (Firefox) относительно длины.Не очень хорошо.
Но теперь, с «проверкой на стороне сервера», я не могу использовать объявление типа PHP как обычно.
public function getFullName(): string
{
return $this->fullName;
}
public function setFullName(string $fullName): void
{
$this->fullName = $fullName;
}
Если отправлено пустое полное имя, я получаю symfonyошибка
Ожидаемый аргумент типа "string", "NULL", заданный в пути к свойству "fullName".
или это при добавлении нового пользователя
Возвращаемое значение App \ Entity \ User :: getFullName () должно иметь тип строки, возвращается ноль
Это
public function getFullName(): ?string
{
return $this->fullName;
}
public function setFullName(?string $fullName): void
{
$this->fullName = $fullName;
}
решает проблему, ноэто обычный способ сделать все "обнуляемым"?Интересно также ... Утверждения будут проверять значения сущностей после их установки?
----- ОБНОВЛЕНИЕ (вот функции контроллера пользователя) ------
/**
* @Route(
* path = "/user-add",
* name = "user_add"
* )
*/
public function addUser(Request $request)
{
$user = new User();
// Update and check user
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// Save it
$this->entityManager->persist($user);
$this->entityManager->flush();
$this->addFlash('notice', 'Your changes were saved!');
return $this->redirectToRoute('user_list');
}
return $this->render('user/user_add_update.html.twig', [
'form' => $form->createView()
]);
}
/**
* @Route(
* path = "/user-update/{id<[1-9]\d*>}",
* name = "user_update"
* )
*/
public function updateUser(int $id, Request $request)
{
// Get user
$user = $this->userRepository->find($id);
if (!$user) {
throw $this->createNotFoundException('No user found for id ' . $id);
}
// Update and check user
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// Save it
$this->entityManager->persist($user);
$this->entityManager->flush();
$this->addFlash('notice', 'Your changes were saved!');
return $this->redirectToRoute('user_list');
}
return $this->render('user/user_add_update.html.twig', [
'form' => $form->createView(),
]);
}