我的博客上有以下代码,用于检查评论是否为垃圾评论
$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的更改日志,但没有看到与此相关的任何内容,这可能是巧合。
答案 0 :(得分:1)
调用$form->bind()
方法只会填充表单的values
属性。它不会保护表格的对象。这是在保存表单时完成的。您可能想要调用保存期间调用的$form->updateObject()
。这将使用表单的值填充对象。