我正在Symfony2中创建一个表单。我想在其上做一些有趣的事情。
假设用户选择某个类别,然后根据他的选择,显示下一个列表,其中包含所选类别的子类别。然后在选择子类别后,将显示其产品的下一个列表,然后显示与产品等相关的更多选择....如何实现此目标,我该如何开始?我不知道因为symfony2中的所有内容都是为服务器端操作定制的。单独表单可能没用,因为我需要一次验证所有内容(处理handleRequest将是一场噩梦)并以某种方式将数据存储在数据库中。
任何建议,想法,文章等?
答案 0 :(得分:0)
您可以发送一个带有{{path}}的AJAX请求作为URL,由symfony2处理,并使用与活动类别相关的选项呈现json或数组。我希望这很有用。
答案 1 :(得分:0)
您可以在此处根据需要修改表单。
第一个表单包含一个类别,当用户选择一个类别时,表单发送(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()));