0

Symfony2 でフォームを作成しています。その上にダイナミックなものを作りたいです。

ユーザーがあるカテゴリを選択すると、その選択に応じて、選択したカテゴリのサブカテゴリを含む次のリストが表示されます。次に、サブカテゴリを選択すると、その製品の次のリストが表示され、製品に関連する選択肢がさらに表示されます....どうすればこれを達成できますか? symfony2 のすべてがサーバー側のアクション用にカスタマイズされているため、わかりません。一度にすべてを検証し (handleRequest を処理するのは悪夢です)、何らかの方法でデータベースにデータを保存する必要があるため、個別のフォームを作成しても意味がありません。

提案、アイデア、記事などはありますか?

4

2 に答える 2

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 に答える
0

symfony2 によって処理される URL として {{path}} を使用して AJAX リクエストを送信し、アクティブなカテゴリに関連するオプションを使用して json または配列をレンダリングできます。これが役に立つことを願っています。

于 2013-07-03T16:46:34.290 に答える