Ошибка Gregwar Captcha в symfony 2.1.7

Я установил пакет GregwarCaptcha и добавил следующий код в контроллер

$form = $this->createFormBuilder()
                ->add('captcha', 'captcha', array(
                            'width' => 200,
                            'height' => 50,
                            'length' => 6,
                        ));
    return $this->render('MyIndexBundle:Default:contact.html.twig',array(
                      'form' => $form->createView()

                    ));

следующий код в шаблоне

{% form_theme form 'MyIndexBundle:Default:captcha.html.twig' %}
 <form action="" method="post">
   ........
  {{ form_widget(form.captcha) }}
  .......
   </form>

и captcha.html.twig

{% block captcha_widget %}
{% spaceless %}
 <img src="{{ captcha_code }}" alt="" title="captcha" width="{{ captcha_width }}" height="{{ captcha_height }}" />
 ...
 {{ form_widget(form, {'attr': { 'autocapitalize': 'off','autocorrect': 'off' }}) }}
  ...
 {% endspaceless %}
 {% endblock %}

я получаю сообщение об ошибке "Метод "captcha" для объекта "Symfony\Component\Form\FormView" не существует". ... если я использую captcha.html.twig, напрямую я получаю код captcah, которого не существует...


person Ammar Hayder Khan    schedule 12.03.2013    source источник
comment
Разве проблема не в рекурсии? В блоке, который должен отображать виджет, вы вызываете form_widget с формой, отображаемой в качестве аргумента.   -  person tomas.pecserke    schedule 14.03.2013


Ответы (1)


Я управляю использованием gregwar captcha, используя его следующим образом:

Сначала добавьте new Gregwar\CaptchaBundle\GregwarCaptchaBundle(), к AppKernel.php

Затем добавьте следующий код на config.yml

gregwar_captcha:
  width: 200
  height: 50
  length: 6

Затем добавьте ->add('captcha', 'captcha') к $builder

Наконец, добавьте {{ form_widget(form.captcha) }} в шаблон ветки.

Так что я не использовал ни form_theme, ни captcha.html.twig

И это работает просто отлично.

person emottet    schedule 04.04.2013
comment
Я только что попробовал с темами. {% form_theme form with '::captcha.html.twig' %} и это тоже работает. Я заметил, что в вашем коде вы забываете with при использовании form_theme. И еще одно отличие, я не поставил , {'attr': { 'autocapitalize': 'off','autocorrect': 'off' }} на тему. Надеюсь, это поможет вам. - person emottet; 04.04.2013