Я использую 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 Извините за мой плохой английский