我们需要在表单中添加确认密码,但现在我们只有一个密码框,那么我们还需要一个密码框,我们只需要使用repeated字段类型即可。顺便更改email字段为email类型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// src/Yoda/UserBundle/Controller/RegisterController.php public function registerAction() { $form = $this->createFormBuilder() ->add('username', 'text') ->add('email', 'email') ->add('password', 'repeated', array( 'type' => 'password', )) ->getForm() ; // .. } |
这个repeated字段是很特殊的,在这种情况下,密码字段会呈现两个。如果这两个字段不匹配,他会输出一个错误。如果你现在刷新,你就会看到这两个字段。
email呢,表面看起来没什么变化,但是你仔细看,他的字段变成了email,他是一个html5字段类型:
1 |
<input type="email" ... /> |
你打开symfony文档中的参考, 你可以找到
这里有所有的内置字段类型,你可以配置到你的字段中。例如,如果你使用repeated,匹配时出现问题,你可以自定义他们的错误信息。
repeated字段和复合字段
现在回头看看我们的2个密码字段。这是form表单工作中的一个亮点。这种方式可以将一个字段变成多个字段:
1 2 3 4 5 6 7 8 9 |
<div> <!-- --> <input type="password" id="form_password_first" name="form[password][first]" required="required" /> </div> <div> <!-- --> <input type="password" id="form_password_second" name="form[password][second]" required="required" /> </div> |
你看到他创建了“first”和“second”字段。其实你可以让他更加灵活,把它分成两行:第一行渲染密码字段,第二行渲染确认密码字段:
1 2 3 4 5 6 7 8 9 |
{# src/Yoda/UserBundle/Resources/views/Register/register.html.twig #} {# ... #} {{ form_row(form.username) }} {{ form_row(form.email) }} {{ form_row(form.password.first) }} {{ form_row(form.password.second) }} {# ... #} |
注意:当一个字段实际上是几个字段时,他被称为复合字段。
当我们刷新,我们看到了完全一样的东西。你不要感觉混乱,也不用担心!这个概念是虽然很高端,但是不是复杂的,也就是说你重复密码可以在Twig中用一个form_row表示,也可以分开他们用两个form_row表示。
自定义字段的Labels
我们通过给form_row添加第二个参数label来设置“first”和“second”的label显示的内容:
1 2 3 4 5 6 7 8 9 10 |
{# src/Yoda/UserBundle/Resources/views/Register/register.html.twig #} {# ... #} {{ form_row(form.password.first, { label: 'Password' }) }} {{ form_row(form.password.second, { label: 'Repeat Password' }) }} |
刷新!这回好很多!