0

我正在 Symfony2 中创建一个表单。我想在上面做一些动态的东西。

假设用户选择了某个类别,然后根据他的选择,显示下一个列表,其中包含所选类别的子类别。然后在选择一个子类别后,将显示其产品的下一个列表,然后是与产品等相关的更多选择......我该如何实现这一点,我应该如何开始?我不知道,因为 symfony2 中的所有内容都是为服务器端操作定制的。做单独的表格可能没用,因为我需要一次验证所有内容(处理 handleRequest 将是一场噩梦)并以某种方式将数据存储在数据库中。

有什么建议、想法、文章等吗?

4

2 回答 2

0

您可以发送带有 {{path}} 作为 URL 的 AJAX 请求,该 URL 将被 symfony2 处理,并使用与活动类别相关的选项呈现 json 或数组。我希望这很有用。

于 2013-07-03T16:46:34.290 回答
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()));
于 2013-07-03T22:24:05.947 回答