Php Symfony 4验证程序don';t从输入读取值 问题:
验证器忽略表单字段中写入的值(例如忽略名称、id和标题)我是否做错了什么 细节: 1。我在Symfony 4中创建了一个基本HTML表单,但没有使用表单组件:Php Symfony 4验证程序don';t从输入读取值 问题:,php,forms,symfony,validation,Php,Forms,Symfony,Validation,验证器忽略表单字段中写入的值(例如忽略名称、id和标题)我是否做错了什么 细节: 1。我在Symfony 4中创建了一个基本HTML表单,但没有使用表单组件: <form action="{{ path("register") }}" method="post"> <input type="text" name="username"> <input type="text" name="email"> <input type="p
<form action="{{ path("register") }}" method="post">
<input type="text" name="username">
<input type="text" name="email">
<input type="password" name="password">
<input type="hidden" name="submitted">
<button type="submit">Create user</button>
</form>
3.为了验证数据,Validator使用一个名为User的实体,该实体包含验证规则,目前仅NotBlank():
namespace App\Entity
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* @ORM\Entity
* @ORM\Table(name="user")
*/
class User implements UserInterface {
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string")
* @Assert\NotBlank()
*/
private $username;
/**
* @ORM\Column(type="string")
* @Assert\NotBlank()
*/
private $password;
/**
* @ORM\Column(type="string")
* @Assert\NotBlank()
*/
private $email;
/-- Getters and Setter here --/
}
我需要知道为什么验证器不能识别表单字段;调试栏显示确实有3个空字段。我认为验证器使用了字段的名称,我还尝试了id和标题,但都失败了
在不使用表单组件的情况下,如何使用Validator从字段中获取数据以验证它们?给定您的代码,用户实体和表单之间绝对没有交互。因此,无论表单中输入了什么,用户实体都将保持空白 这至少意味着,您需要手动填充用户实体:
请注意,这无助于在视图中实际显示验证错误。为此,您需要将
$errors
传递到视图并手动检查每个字段。但所有这些都可以(或多或少)使用自动完成。感谢您的回答。填充数据没有问题,我想要的是在插入数据库之前验证信息。我理解视图中的变量$errors,不用担心。我要找的就是避免使用表单组件。@Juannicolas好吧,那么你有了答案,只需用表单数据填充实体并进行验证。@Juannicolas或者我遗漏了什么?天哪,我明白你想教我什么了。我检查了官方文件(第十次),一切都有道理。Yoshi,谢谢你,你一直都是对的,是我以自己的经验看不到解决方案。在这之后连续8个小时,解决方案非常简单。
namespace App\Entity
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* @ORM\Entity
* @ORM\Table(name="user")
*/
class User implements UserInterface {
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string")
* @Assert\NotBlank()
*/
private $username;
/**
* @ORM\Column(type="string")
* @Assert\NotBlank()
*/
private $password;
/**
* @ORM\Column(type="string")
* @Assert\NotBlank()
*/
private $email;
/-- Getters and Setter here --/
}
if ($request->request->get("submitted") !== null) {
$user = new User();
// populate:
$user->setUsername($request->request->get('username'));
//...
$validator = $this->get("validator");
$errors = $validator->validate($user);
if (count($errors) === 0) {
/-- Insert the user in the database as above. --/
}
}