*/ class CaptchaType extends AbstractType { private $key = 'captcha'; protected $session; public function __construct(Session $session) { $this->session = $session; } public function buildForm(FormBuilder $builder, array $options) { $builder->addValidator( new CaptchaValidator($this->session, $this->key) ); } public function buildView(FormView $view, FormInterface $form) { $generator = new CaptchaGenerator($this->generateCaptchaValue()); $view->set('captcha_code', $generator->getCode()); } public function getParent(array $options) { return 'text'; } public function getName() { return 'captcha'; } private function generateCaptchaValue() { $charset = 'abcdefghijklmnopqrstuvwxyz0123456789'; $value = ''; $chars = str_split($charset); for ($i=0; $i<5; $i++) { $value.= $chars[array_rand($chars)]; } $this->session->set($this->key, $value); return $value; } }