我有一个只发布评论的symfony 2表单。我想在将其保存到数据库之前从已发布的表单中删除html字符。我在某处读到你不能直接改变发布表单的值,你需要创建一个事件监听器。为此,我创建了一个事件监听器来实现这一目标。所以我创建了一个事件监听器,下面是代码。
<?php
// src/Adhl/FrontBundle/EventListener/StripHtmlSubscriber.php
namespace Adhl\FrontBundle\EventListener;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class StripHtmlSubscriber implements EventSubscriberInterface {
public static function getSubscribedEvents() {
return array(FormEvents::PRE_SET_DATA => 'preSetData');
}
public function preSetData(FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
$event->getData()->setDetails(strip_tags($event->getData()->getDetails()));
$form->add('details', 'textarea', array(
'label' => false,
'attr' => array(
'cols' => '30',
'class' => 'text-input span8'
)
)
);
}
}
$event->getData()->setDetails()
更改已发布字段“详细信息”的值
但$event->getData()->getDetails()
不会返回任何内容。
我想获取名为“details”的帖子字段,从中删除html标记并将其保存回相同的发布密钥。
在简单的PHP中我可以这样做:
$_POST['details'] = strip_tags($_POST['details']);
有谁能告诉我我做错了什么?
答案 0 :(得分:0)
您的FormType类是什么样的? 你在实体或数组上绑定它吗?
如果你进行实体绑定,那么只需在实体中修改实体中的setDetails方法
setDetails($details) {
$this->details = strip_tags($details);
}
如果你有一个数组绑定,那么在action或subscriber中getData()将返回一个关联数组而不是实体
$data = $event->getData();
$data['details'] = strip_tags($data['details']);
$event->setData($data);