我正在尝试为Symfony 1.4实现sfCaptchaGDPlugin。
我创建了CommentForm
类,扩展了BaseForm
。
class CommentForm extends BaseForm
{
public function configure()
{
$stars = array('star1', 'star2', 'star3', 'star4', 'star5');
$fields = array();
$fields['Subject'] = new sfWidgetFormInputText(array('default' => 'Bewertung'));
$fields['Voting'] = new btRatingStars(array('choices' => $stars), array('class' => 'star'));
$fields['Username'] = new sfWidgetFormInputText();
$fields['Captcha'] = new sfWidgetCaptchaGD();
$fields['Text'] = new sfWidgetFormTextarea();
$fields['ObjectId'] = new sfWidgetFormInputHidden();
$fields['Userid'] = new sfWidgetFormInputHidden();
$fields['Type'] = new sfWidgetFormInputHidden();
$this->setWidgets($fields);
}
}
我可以看到Captcha并输入代码。现在我正试图通过AJAX请求提交表单。
$('.btnsmall').click(function() {
$.post('<?php echo url_for('forum/saveComment') ?>', {
data: $('.form').serializeArray()
}, function(data) {
console.log(data);
});
return false;
});
以下操作如下所示:
if ($request->isXmlHttpRequest())
{
$data = $request->getParameter('data');
$formdata = array();
foreach ($data as $field)
{
$formdata[$field['name']] = $field['value'];
}
$form = new CommentForm();
$form->setDefaults($formdata);
$form->setValidator('Captcha', new sfCaptchaGDValidator());
$form->bind(array(
'Captcha' => $formdata['Captcha'],
));
var_dump($form->hasErrors());
var_dump($form->valid());
}
结果如下:
bool(true)
bool(false)
问题是跨站点保护...... 不得不通过实现csrf令牌 $形式[ '_ csrf_token'];
答案 0 :(得分:0)
问题解决了!
我将每个Formfield
分隔为echo $form['fieldname']
。我忘记了csrf
令牌。在我添加echo $form['_csrf_token']
之后,表单通过了验证器,包括Captcha。
感谢您的帮助。