提交前修改请求

时间:2014-05-22 15:49:25

标签: php forms symfony

我在修改表单验证时遇到问题。

我有这个实体:

class Ad {

    private $id;

    /**
    * @var Entity\Category
    * @ORM\ManyToMany(targetEntity="Entity\Category")
    *
    */
    protected $category;
}

对于很多情况,我需要很多 Category ,所以我将 ManyToMany 与checbox表格放在一起。但在一个案例中,我需要一个只有类别上的单选按钮的表单才能获得一个。

所以我创建了相应的FormType:

class AdFormType {

    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder->add('category', null, [
            'class' => 'Entity\Category',
            'required' => true,
            'expanded' => true,
            'multiple' => false,
            'error_bubbling' => true
        ]);
    }
}

问题是,当我执行$ form-> submit($ request)时,它失败了,因为它需要 ArrayCollection 而不是 Category 实体。

所以我尝试用 PRE_SUBMIT 事件创建一个监听器来修改请求,但是失败了。

class AdListener implements EventSubscriberInterface {

    public static function getSubscribedEvents() {
        return array(FormEvents::PRE_SUBMIT => 'onPreBind',FormEvents::POST_SUBMIT => 'onPostBind',FormEvents::SUBMIT => 'onBind');
    }

    public function onPreBind(FormEvent $event) {
        $data = $event->getData();
        $data['category'] = [$data['category']];
        $event->setData($data);
    }
}

您是否有一些想法强制类别 ArrayCollection

感谢您的帮助。

BOUFFE

1 个答案:

答案 0 :(得分:0)

我认为你想要做的是使用collection field type。关于这个here有一篇很棒的食谱文章。这可能是实现你想要做的事情的正确方法。