我的 Symfony 表单错误总是全局的。没有像预期的那样链接到特定字段
My Symfony form errors are always global. Not linked to the specific field like supposed to
我有一个 Symfony 表单,当字段为空白时我会收到错误消息。
我已经尝试将 error_bubbling 设置为 false,但它仍然不起作用(默认情况下应该是 false)
这是我的代码,我删除了所有不需要的东西:
控制器:
/**
* @Route("/add", name="add")
*/
public function add(Request $request)
{
$post = new Post();
$form = $this->createForm(PostType::class, $post);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) { } else { }
return $this->render('blog/add.html.twig', array('form' => $form->createView()));
}
实体:
/**
* @ORM\Entity(repositoryClass="App\Repository\PostRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Post
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
* @Assert\NotBlank
*/
private $Title;
/**
* @ORM\Column(type="text")
* @Assert\NotBlank
*/
private $Content;
...
表格类型:
namespace App\Form;
use App\Entity\Post;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class PostType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('title')
->add('content');
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Post::class
]);
}
}
表格:
{% extends "base.html.twig" %}
{% block body %}
<h2>
Create a post
</h2>
{{ form_start(form) }}
{{ form_widget(form) }}
<input type="submit" class="btn" value="Create" />
{{ form_end(form) }}
{% endblock %}
当我在 post 之后查看对象时,所有错误都链接到表单并且子项(表单字段)中没有错误。
有谁知道哪里出了问题?
在 buildForm() 中,您需要将字段大写。它们区分大小写,并且在您的数据库中是大写的。
我有一个 Symfony 表单,当字段为空白时我会收到错误消息。
我已经尝试将 error_bubbling 设置为 false,但它仍然不起作用(默认情况下应该是 false)
这是我的代码,我删除了所有不需要的东西:
控制器:
/**
* @Route("/add", name="add")
*/
public function add(Request $request)
{
$post = new Post();
$form = $this->createForm(PostType::class, $post);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) { } else { }
return $this->render('blog/add.html.twig', array('form' => $form->createView()));
}
实体:
/**
* @ORM\Entity(repositoryClass="App\Repository\PostRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Post
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
* @Assert\NotBlank
*/
private $Title;
/**
* @ORM\Column(type="text")
* @Assert\NotBlank
*/
private $Content;
...
表格类型:
namespace App\Form;
use App\Entity\Post;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class PostType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('title')
->add('content');
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Post::class
]);
}
}
表格:
{% extends "base.html.twig" %}
{% block body %}
<h2>
Create a post
</h2>
{{ form_start(form) }}
{{ form_widget(form) }}
<input type="submit" class="btn" value="Create" />
{{ form_end(form) }}
{% endblock %}
当我在 post 之后查看对象时,所有错误都链接到表单并且子项(表单字段)中没有错误。
有谁知道哪里出了问题?
在 buildForm() 中,您需要将字段大写。它们区分大小写,并且在您的数据库中是大写的。