0

symfony1.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);
      }

    }

キャプチャが表示され、コードを入力できます。現在、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)

私はこのチュートリアルに従っていました

問題はクロスサイト保護でした...$form['_csrf_token']を介してcsrfトークンを実装する必要がありました。

4

1 に答える 1

0

問題が解決しました!

Formfieldそれぞれをで個別にレンダリングしましたecho $form['fieldname']csrfトークンを忘れました。フォームを追加echo $form['_csrf_token']した後、キャプチャを含むバリデーターに合格しました。

ご協力いただきありがとうございます。

于 2012-08-02T12:16:19.513 に答える