Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 5控制器赢得';无法验证错误_Php_Symfony_Doctrine Orm - Fatal编程技术网

Php Symfony 5控制器赢得';无法验证错误

Php Symfony 5控制器赢得';无法验证错误,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我正在尝试将Typescript+Express+Firebase制作的项目的某些部分迁移到Symfony 5和MySQL。但我不明白为什么这个机器不工作 当我提交带有意外字符的表单时(即:带有3个字符的密码),它会创建一个用户,而不是用户实体中指定的密码。唯一有效的约束验证是,它不会显示任何表单错误 这就是我的控制器的外观: /** *获取:显示表单 *POST:创建一个用户 * *@Route(“/users/crear”,name=“create_user”,methods={“GET”

我正在尝试将Typescript+Express+Firebase制作的项目的某些部分迁移到Symfony 5和MySQL。但我不明白为什么这个机器不工作

当我提交带有意外字符的表单时(即:带有3个字符的密码),它会创建一个用户,而不是
用户
实体中指定的密码。唯一有效的约束验证是,它不会显示任何表单错误

这就是我的控制器的外观:
/**
*获取:显示表单
*POST:创建一个用户
* 
*@Route(“/users/crear”,name=“create_user”,methods={“GET”,“POST”})
*/
公共函数创建用户(请求$Request,entityManager接口$entityManager,validator接口$validator)
{
$user=新用户();
//形式
如果($request->isMethod('GET')){
$form=$this->createForm(CrearUserType::class,$user);
返回$this->render('user/create.html.twig'[
'form'=>$form->createView(),
“错误”=>[]
]);
}
//提交表格
$data=$request->request->get('create_user');
$errors=[];
$user->setName($data['name']);
$user->setEmail($data['email']);
$user->setPassword($data['password']);
$user->setCreatedAt(new\DateTime());
$user->setUpdatedAt(new\DateTime());
$form=$this->createForm(CrearUserType::class,$user);
//实体验证
$errors=$validator->validate($user);
如果(count($errors)>0{//,则始终为0
$user->setPassword(“”);
返回$this->render('user/create.html.twig'[
'form'=>$form->createView(),
“用户”=>$user,
“错误”=>$errors
]);
}
试一试{
$user->setPassword(密码\u散列($user->getPassword(),密码\u BCRYPT));
$entityManager->persist($user);
$entityManager->flush();
$this->addFlash(
“成功”,
已保存“用户“%$User->getName()”
);
返回$this->redirectToRoute('users');
}catch(\Exception$Exception){
$user->setPassword(“”);
$this->addFlash(
“错误”,
“服务器错误:”。$exception->getMessage()
);
返回$this->render('user/create.html.twig'[
'form'=>$form->createView(),
“用户”=>$user,
“错误”=>$errors
]);
}
}
这是我的实体:
namespace-App\Entity;
使用条令\ORM\Mapping作为ORM;
使用Symfony\Component\Validator\Constraints作为断言;
使用Symfony\Bridge\doctor\Validator\Constraints\uniquentity;
/**
*@ORM\Entity(repositoryClass=“App\Repository\UserRepository”)
*@uniquentity(“电子邮件”)
*/
类用户
{
/**
*@ORM\Id()
*@ORM\GeneratedValue()
*@ORM\Column(type=“integer”)
*/
私人$id;
/**
*@ORM\Column(type=“string”,长度=255)
*@Assert\NotBlank(message=“Name是必需的”)
*/
私人$name;
/**
*@ORM\Column(type=“string”,length=255,unique=true)
*@Assert\NotBlank(message=“电子邮件是必需的”)
*@Assert\Email(
*message=“无效的电子邮件地址”
* )
*/
私人电子邮件;
/**
*@ORM\Column(type=“string”,长度=60)
*@Assert\NotBlank(message=“密码是必需的”)
*@Assert\GreaterThanOrEqual(
*值=6,
*message=“密码长度必须至少为6个字符”
* )
*/
私人$password;
/**
*@ORM\Column(type=“date”)
*/
私人$createdAt;
/**
*@ORM\Column(type=“date”)
*/
私人$updatedAt;
公共函数getId():?int
{
返回$this->id;
}
公共函数getName():?字符串
{
返回$this->name;
}
公共函数setName(字符串$name):self
{
$this->name=$name;
退还$this;
}
公共函数getEmail():?字符串
{
返回$this->email;
}
公共函数setEmail(字符串$email):self
{
$this->email=$email;
退还$this;
}
公共函数getPassword():?字符串
{
返回$this->password;
}
公共函数setPassword(?string$password):self
{
$this->password=$password;
退还$this;
}
公共函数getCreatedAt():?\DateTimeInterface
{
返回$this->createdAt;
}
公共函数setCreatedAt(\DateTimeInterface$createdAt):self
{
$this->createdAt=$createdAt;
退还$this;
}
公共函数getUpdatedAt():?\DateTimeInterface
{
返回$this->updatedAt;
}
公共函数setUpdatedAt(\DateTimeInterface$updatedAt):self
{
$this->updatedAt=$updatedAt;
退还$this;
}
}

所以,这里有什么错误的线索吗?

我不确定我的回答,因为我从不使用验证接口处理请求。我使用controller提供的HandlerRequest方法

您创建了表单

 $form = $this->createForm(CrearUserType::class, $user);
但你忘了处理这个请求

 $form->handleRequest($request);
因此,您的表单不会验证请求转发的数据。尝试在$form创建之后添加此行。然后,您可以测试用户实体是否有效

if ($form->isValid()) {
 //no errors
}
//error exists

您是否已经启用了每个指令的验证以及注释选项?也可以考虑遵循DOCS中的表单示例。至少您可以减少操作中的行数。@DanielProtopov,是的,我已经在
框架中启用了注释和验证本身。yaml
@Cerad,我使用了
make:form
控制台命令,然后在将其传递到视图后,使用
{form(form)}
将其保存到数据库中,我想至少电子邮件是