一聚教程网:一个值得你收藏的教程网站

热门教程

symfony框架注册验证实例演示

时间:2022-06-25 02:49:04 编辑:袖梨 来源:一聚教程网


让我们添加一个些验证。以防止我们输入一个无效的邮件和存在的用户名。


html5验证

尝试提交空白表单!哇!你会发现我们已经有了一些验证。事实上,如果我们输入一个无效的email地址,我们也可以看到错误。这就是html5验证。当我们检查这个字段,我们会看到他:

 

首先,每个字段都有一个required属性,如果你的浏览器支持html5,他会爆出一个不能为空的提示。其次,input有一个type=email这是告诉浏览器必须填入一个有效的电子邮件地址,而不是随便的字符串。

我们在input中有一个type=email字段是因为我们在symfony的form中设置了email字段,但是input中的required属性是从哪里来的呢?

 
字段配置

要解决这个问题,要看添加字段的第三个参数:为一个数组


// src/Yoda/UserBundle/Form/RegisterFormType.php
// ...
 
$builder->add('email', 'email', array(
    // an array of options to pass to this field
))
每一个字段类型都可以已不同的方式配置。例如,这个repeated就有一个type配置。每个字段都有一堆的选项,required就是其中一个。把email字段的required配置为false并刷新:

// src/Yoda/UserBundle/Form/RegisterFormType.php
// ...
 
$builder
    // ...
    ->add('email', 'email', array(
        'required' => false
    ))
    // ...
;
这个配置所有字段都有,并且它默认都为true。

在这里每一个字段类型都有很多的配置变量。了解他们的最简单的方式就是通过文档。请记住表单字段类型参考。

他显示了所有的字段类型和他们的配置。

 

挖掘核心
你可以深入到源代码,有一个RepeatedType类,里面可以找到setDefaultOptions方法,这个方法可以设置默认repeated类型的配置变量。

大部分的全局配置都会继承FormType类。在这里你可以看到required和一些其他的类型。那么在他的父类BaseType里我们可以看到像label和attr。我们可以在表单类中添加一些自定义的标签或者添加一个字段的class:


// src/Yoda/UserBundle/Form/RegisterFormType.php
// ...
 
$builder
    ->add('email', 'email', array(
        'required' => false,
        'label' => 'Email Address',
        'attr'    => array('class' => 'C-3PO')
    ))
    // ...
;
当我们刷新,你可以看到它开始为我们工作了。

 

禁用HTML5验证

html5验证虽然很好,但是还不够,我们还需要服务器端的验证。另外,你不能够定制html5验证的样子和消息。而且,symfony会默认所有的字段都有required属性,这太烦人了。

我建议避免使用html5验证。要禁用他,这时我们要添加一个novalidate属性到你的form标签中:


{# src/Yoda/UserBundle/Resources/views/Register/register.html.twig #}
 
{# ... #}


刷新表单,并尝试上传空表单。我们看到一个很大的数据库错误,这证明了我们关闭了html5验证。现在,让我们添加一些服务器验证!

热门栏目