在这里,您可以在需要时修改表单。
第一个表单包含一个类别,当用户选择一个类别时,表单是发送(Ajax)和 pre_bind 上的一个事件检查是否设置了类别,如果设置了,则为子类别添加另一个字段
例如:
class CategoryEventSubscriber implements EventSubscriberInterface
{
protected $factory;
public function __construct(FormFactory $factory)
{
$this->factory = $factory;
}
public function preBind(FormEvent $event)
{
$form = $event->getForm();
$data = $event->getData();
$levelOne = isset($data['categoryLevelOne']) ? $data['categoryLevelOne'] : null;
if (!empty($levelOne)) {
$form->add($this->factory->createNamed('categoryLevelTwo'));
}
// level n+1 ...
}
public static function getSubscribedEvents()
{
return array(FormEvents::PRE_BIND => 'preBind');
}
}
在您的表单中添加事件订阅者
$builder->addEventSubscriber(new CategoryEventSubscriber($builder->getFormFactory()));