修改或覆盖symfony 2中已过帐表单字段的值

时间:2014-04-27 22:53:19

标签: php forms symfony

我有一个只发布评论的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']);

有谁能告诉我我做错了什么?

1 个答案:

答案 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);