我刚刚第一次学习 Symfony。
表单验证没有按预期工作,我实际上已经按照 Symfony 文档留下了样板代码,我已经阅读了其他堆栈溢出文章和文档 10 遍,看看我是否错过了一些东西,但我无法弄清楚。
客户端验证已关闭,基本上可以很好地测试服务器端验证。但是,当提交表单时,即使表单为空且数据无效,isValid() 方法也会返回 true。我在 Entity 和 formType 中添加了约束,但它只是绕过了所有内容,我知道这一点,因为异常是由数据库或密码编码方法引发的。
发现:
当提交完全空的表单时:encodePassword() 会抛出异常,因为密码字段为 null 并且它需要字符串,(它甚至不应该进入这个阶段,因为我想象 isValid() 应该返回 false?)
使用密码和所有其他值作为空值提交:绕过所有内容,只有数据库抛出异常。
为 uniqueCode 提交错误的模式:验证器甚至无法识别任何内容并每次都通过它
handleRequest() 方法不会抛出任何异常或返回 false,除了密码,我收到一个非常丑陋的错误,说密码的参数 2 不能为空,所以显然验证没有发生, isValid() 返回 true。
错误异常来自数据库,
当我尝试插入具有错误模式的唯一代码时,插入没有问题,当名称为空时,它通过验证,但数据库抛出异常,当密码字段为空时,它仍然通过验证,
Symfony 文档说:
handleRequest() 方法将数据写回同一个对象,
然后我们验证数据:
“在上一节中,您学习了如何提交包含有效或无效数据的表单。在 Symfony 中,问题不在于“表单”是否有效,而在于底层对象(本例中的 $task)是否有效在表单应用提交的数据后有效。调用 $form->isValid() 是一个快捷方式,询问 $task 对象是否具有有效数据。
我尝试查看 ValidatorInterface 文档,但其中明确指出:“大多数时候,您不会直接与验证器服务交互,也不需要担心打印出错误。大多数时候,您将使用在处理提交的表单数据时间接验证。有关更多信息,请参阅如何验证 Symfony 表单。”
我在这里缺少什么?
叮当猫咪