为了账号安全,请及时绑定邮箱和手机立即绑定

Symfony 5 注册表验证不起作用

Symfony 5 注册表验证不起作用

PHP
慕仙森 2023-11-03 15:34:58
我刚刚第一次学习 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 表单。”我在这里缺少什么?
查看完整描述

1 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

这对于 Stackoverflow 来说并不是真正正确的格式,但我们可以看看在关闭之前我们能走多远。可能需要继续访问 Reddit Symfony 论坛。


从小事做起,让以下行动发挥作用。请注意,没有任何实体或其他东西正在发生。只是想让自己相信验证的基础知识确实有效:


class RegistrationController extends AbstractController

{

    public function register(Request $request)

    {

        $form = $this->createFormBuilder()

            ->add('username', TextType::class, [

                'constraints' => new NotBlank(['message' => 'User name cannot be blank'])

            ])

            ->add('save', SubmitType::class, ['label' => 'Register'])

            ->getForm();


        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {

            dump('Validated');

        }

        return $this->render('user/register.html.twig',['form' => $form->createView()]);


    }

}


# user/register.html.twig

{% extends 'base.html.twig' %}


{% block body %}

    <h1>Register Form</h1>

    {{ form_start(form, {'attr':{'novalidate':'novalidate'}}) }}

    {{ form_end(form) }}

{% endblock %}


查看完整回答
反对 回复 2023-11-03
  • 1 回答
  • 0 关注
  • 60 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信