Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 提交前修改请求_Php_Forms_Symfony - Fatal编程技术网

Php 提交前修改请求

Php 提交前修改请求,php,forms,symfony,Php,Forms,Symfony,我在修改表单验证请求时遇到问题 我有这个实体: class Ad { private $id; /** * @var Entity\Category * @ORM\ManyToMany(targetEntity="Entity\Category") * */ protected $category; } 对于很多情况,我需要很多类别,所以我用checbox表单放了很多。但在一个例子中,我需要一个在类别上只有单选按钮的表单才能得到一个

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

我有这个实体:

class Ad {

    private $id;

    /**
    * @var Entity\Category
    * @ORM\ManyToMany(targetEntity="Entity\Category")
    *
    */
    protected $category;
}
对于很多情况,我需要很多类别,所以我用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);
    }
}
你有什么想法来强制类别的数组集合吗

谢谢你的帮助


Bouffe

我想您在这里要做的是使用。这方面有一篇很棒的食谱文章。不管怎样,这可能是实现您要做的事情的正确方法