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