Php Symfony 4验证程序don';t从输入读取值 问题:

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

验证器忽略表单字段中写入的值(例如忽略名称、id和标题)我是否做错了什么

细节: 1。我在Symfony 4中创建了一个基本HTML表单,但没有使用表单组件:

<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. --/
    }
}