我在修改表单验证时遇到问题。
我有这个实体:
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