如果读者是从表世界过来的,应该知道怎么通过重载模板来改变第三方 Bundle 提供的模板。这里将重载用户登录页面作为作业留给大家,只介绍重载注册页面。不过为了提供新鲜的知识点,我们这次除了要装修注册页面以外,还要求给注册页面提供验证码。
对于我这种收集 bundle 的高手,自然少不了推荐验证码相关的 bundle:GregwarCaptchaBundle
一如既往安装 Bundle
$ composer require gregwar/captcha-bundle
一如既往注册Bundle
// app/appKernel.php
public function registerBundles()
{
$bundles = array(
// ...
new Gregwar\CaptchaBundle\GregwarCaptchaBundle(),
);
}
好了,准备工作结束。
重载 FOSUserBundle的RegistrationFormType
FOSUserBundle 支持使用其他的注册表单。只需要简单配置一下即可
# app/config/config.yml
fos_user:
# ...
registration:
form:
type: app_reg
不过目前 type 里指定的 app_reg
我们还没实现,接下来我们应该创建这个 form_type。如果啃过官方文档,应该知道定义一个 form_type 需要先定义一个 FormType 类,然后再定义为服务,并且服务的 alias 一定要和 form 的 getName
方法返回的内容一致。
先定义类:
<?php
// src/AppBundle/Form/Type/RegType.php
namespace AppBundle\Form\Type;
use Symfony\Component\Form\FormBuilderInterface;
use FOS\UserBundle\Form\Type\RegistrationFormType;
class RegType extends RegistrationFormType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder->add('captcha', 'captcha', [
'mapped' => false,
]);
}
public function getName()
{
return 'app_reg';
}
}
然后是服务:
# app/config/services.yml
services:
# ...
app.form.type.reg:
class: AppBundle\Form\Type\RegType
arguments:
- %fos_user.model.user.class%
tags:
-
name: form.type
alias: app_reg
让我们访问 /register
页面,已经可以看到一个带验证码的表单字段,虽然整个表单丑到没朋友……
按照表世界说的方法找到应该重载的模板
未完待续……
这篇教程自 4月9日 创建之后,我就一直想把此系列尽快终结掉,为大家献上一个完美的结局,但是并不知道以什么方式去完成,不知道我们的小项目要添加什么样的功能。最近工作也忙,加班是常态,也就一直拖着,但有些事情如果让他一直拖着,可能就真不了了之,还不如畅快一点。
今天我想怎么着此系列也应该有个说法了,我的打算是强行结束掉此教程,但关于 Symfony 的探索分享还是会继续。如果大家意犹未尽,可以继续关注我发表在 Posts 或者教程里的其他帖子。此教程是写给刚学习 Symfony 的同学入门用的,如果都看完,应该知道 Symfony 的大概用法了。后面我将写一些独立的文章,来将 Symfony 提供的各种开发解决方案介绍给大家。
谢谢
~~ The End ~~
Symfony 框架实战教程——第六天#Alt:验证码 by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

写作累,服务器还越来越贵
求分担,祝愿好人一生平安
天使打赏人
8 Comments
EZ
8月 18, 2017 在 4:14 下午老师,有时间是否还会更新symfony实战教程系列,, 还有评论下的验证码是什么扩展实现的?
Chris Yue
8月 18, 2017 在 6:08 下午当然会,Symfony 要有大动作了,敬请期待。
验证码插件叫 Captcha by BestWebSoft
菜菜鸟
3月 12, 2017 在 5:46 下午老师您好,我在使用指令composer require gregwar/captcha-bundle安装的时候会报错,请老师看看。
Chris Yue
3月 13, 2017 在 3:45 下午您是用的什么版本?我刚基于 Symfony 3.2.6 版本是可以成功安装上 captcha-bundle 最新版本 2.0.3 的。
我看你的报错信息其实跟安装 captcha-bundle 应该没什么关系,你的报错信息是说可能有其他服务需要依赖
twig.form.resources
服务,但你当前环境并没有这个服务。我建议你重新安装一个新的 Symfony 环境,然后只安装 captcha-bundle,就只尝试使用这个组件的功能,排除其他组件的影响。donow
12月 9, 2015 在 9:40 下午很好的教程,学习了,thanks
孤独患者
12月 2, 2015 在 5:42 下午照着教程来的结果访问
/register
页面报错Could not load type “app_reg”
500 Internal Server Error – InvalidArgumentException
请教这是问题出在哪里
Chris Yue
12月 7, 2015 在 8:47 下午看样子是symfony并不知道app_reg是个什么表单,检查一下是不是有typo
ccna30
4月 14, 2015 在 2:57 下午看来这个Bundle相对简单啊,期待后续。