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 回答