0

コメントがスパムかどうかを確認するために、ブログに次のコードがあります

  $tmp = new Comment();
  $tmp->setName(urldecode($this->getRequest()->getCookie('commName')));
  $tmp->setEmail(urldecode($this->getRequest()->getCookie('commEmail')));
  $tmp->setUrl(urldecode($this->getRequest()->getCookie('commUrl')));
  $this->form = new CommentAddForm($tmp);

if ($request->isMethod('post'))
{

  $this->form->bind($request->getParameter('comment'));

  if ($this->form->isValid())
  {
    $key = sfConfig::get('akismet_api_key');

    $data = array(
          'blog'       => '...',
          'user_ip'    => $this->getRequest()->getHttpHeader('addr','remote'),
          'user_agent' => $_SERVER['HTTP_USER_AGENT'],
          'referrer'   => $_SERVER['HTTP_REFERER'],
          'comment_type'         => 'comment',
          'comment_author'       => $this->form->getObject()->getName(),
          'comment_author_email' => $this->form->getObject()->getEmail(),
          'comment_author_url'   => $this->form->getObject()->getUrl(),
          'comment_content'      => $this->form->getObject()->getComment()
    );

    $isSpam = myLib::akismet_comment_check($key, $data);
    (…)

しかし、私はスパムに襲われていることに気づきました。ローカルでテストしていると$this->form->getObject()->getName()、フォームに名前が返されないようですが、以前の名前が使用され、Cookieに保存されています。

symfony 1.4.19の変更ログを調べましたが、それに関連するものは何も見つかりませんでした。偶然かもしれません。

4

1 に答える 1

1

メソッドを呼び出すと、フォームのプロパティ$form->bind()のみが入力されます。valuesフォームのオブジェクトを水和しません。これは、フォームを保存するときに行われます。$form->updateObject()保存中に呼び出される呼び出しを行うことをお勧めします。これにより、オブジェクトにフォームの値が入力されます。

于 2012-10-12T15:10:44.960 に答える