Form-> getObject()在1.4.19中不再起作用了?

时间:2012-10-12 14:02:28

标签: php symfony-1.4 symfony-forms

我的博客上有以下代码,用于检查评论是否为垃圾评论

  $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的更改日志,但没有看到与此相关的任何内容,这可能是巧合。

1 个答案:

答案 0 :(得分:1)

调用$form->bind()方法只会填充表单的values属性。它不会保护表格的对象。这是在保存表单时完成的。您可能想要调用保存期间调用的$form->updateObject()。这将使用表单的值填充对象。