除提交按钮外,我的表格是标准表格
{{ form_start(form) }}
{{ form_widget(form) }}
<input type="submit" value="{{ 'action.save'|trans }}" formnovalidate />
{{ form_end(form) }}
我在“提交”按钮中使用“ formnovalidate”禁用了html5验证, 因为,例如这里(实体用户)
/**
* @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错误
在属性路径“ fullName”处给出的类型为“ string”,“ NULL”的预期参数。
或在添加新用户时使用此
App \ Entity \ User :: getFullName()的返回值必须是字符串类型,返回null
此
public function getFullName(): ?string
{
return $this->fullName;
}
public function setFullName(?string $fullName): void
{
$this->fullName = $fullName;
}
解决了问题,但这是通常的方法,使所有内容“都为空”吗? 我也想知道...设置值后,断言者将检查Entity值吗?
-----更新(这里是用户控制器功能)------
/**
* @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(),
]);
}
答案 0 :(得分:1)
错误提示getFullName
必须返回一个字符串。您的getter方法是:
public function getFullName(): string
{
return $this->fullName;
}
在您声明之前:
private $fullName;
如果将其更改为:
private $fullName = '';
也就是说,分配一个默认值,getter将返回一个空字符串,并且不应引发错误。
答案 1 :(得分:0)
您如何处理此请求?
您必须使用此构造
public function someControllerMethod(Request $reqest) {
$form = $this->createForm(UserType::class);
$form->handleRequest($request);
if ($form->isSubmited && $form->isValid()){
$user = $form->getData();
// do some stuff
return $this->redirect ...
} else {
return $this->render('editingPage.html.twig', [
'form' => $form->createView(),
]);
}
}