Проблема с SfExtraFormPlugin (ReCaptcha) - PullRequest
1 голос
/ 25 февраля 2011

Я использую Symfony 1.4.8. Я хочу добавить ReCaptcha в мою форму, я использую SfExtraFormPlugin, я использую Readme

Итак, согласно readme, я добавляю

    $this->widgetSchema['captcha'] = new sfWidgetFormReCaptcha(array(
  'public_key' => sfConfig::get('app_recaptcha_public_key')
));

$this->validatorSchema['captcha'] = new sfValidatorReCaptcha(array(
  'private_key' => sfConfig::get('app_recaptcha_private_key')
));

Мой action.class

  protected function processForm(sfWebRequest $request, sfForm $form)
  {
    $form->bind(

     $request->getParameter($form->getName()),
     $request->getFiles($form->getName())             
                    );
    if ($form->isValid())
    {
      $voice_post = $form->save();

      $this->redirect('post/index', $post);
    }
  }

Чем я должен добавить в свой action.class

$captcha = array(
  'recaptcha_challenge_field' => $request->getParameter('recaptcha_challenge_field'),
  'recaptcha_response_field'  => $request->getParameter('recaptcha_response_field'),
);
$this->form->bind(array_merge($request->getParameter('contact'), array('captcha' => $captcha)));

Итак, я не знаю, как это сделать правильно.

когда я делаю

  protected function processForm(sfWebRequest $request, sfForm $form)
  {

     $captcha = array(
  'recaptcha_challenge_field' => $request->getParameter('recaptcha_challenge_field'),
  'recaptcha_response_field'  => $request->getParameter('recaptcha_response_field'),
);

    $form->bind(

            array_merge (

            $request->getParameter($form->getName()),
            $request->getFiles($form->getName()),
            array('captcha' => $captcha)

                    ));
    if ($form->isValid())
    {
      $voice_post = $form->save();

      $this->redirect('post/index', $post);
    }
  }

У меня ошибка

Эта форма состоит из нескольких частей, что означает, что вам необходимо указать массив файлов в качестве второго аргумента метода bind (). Капча в _form.php

<?php echo $form['captcha']->renderRow() ?>

Исходный код страницы:

<tr>
  <th><label for="voice_post_captcha">Captcha</label></th>
  <td>
    <script type="text/javascript">
    var RecaptchaOptions = {
    theme : 'clean',
    lang : 'en'
    };
    </script>
    <script type="text/javascript" src="http://api.recaptcha.net/challenge?k=6LcS4MESAAAAADg7FPXAuPfIwvIeFS7LhSGEhUdb"></script>
    <noscript>
      <iframe src="http://api.recaptcha.net/noscript?k=6LcS4MESAAAAADg7FPXAuPfIwvIeFS7LhSGEhUdb" height="300" width="500" frameborder="0"></iframe><br />
      <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
      <input type="hidden" name="recaptcha_response_field" value="manual_challenge" />
    </noscript>
    </td>
</tr>

p.s Извините за мой плохой английский

1 Ответ

3 голосов
/ 25 февраля 2011

Заменить:

$form->bind(
    array_merge (
        $request->getParameter($form->getName()),
        $request->getFiles($form->getName()),
        array('captcha' => $captcha)
    )
);

С:

$form->bind(
    array_merge (
        $request->getParameter($form->getName()),
        array('captcha' => $captcha)
    ),
    $request->getFiles($form->getName())
);

Вторым параметром функции bind должен быть массив файлов. Вызов array_merge объединяет результаты проверки в массив значений формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...