我有一個篩選表單,我希望將其應用於多選下拉列表。所以過濾器有一個「應用」按鈕,點擊它時,我想根據過濾器選項更新下拉列表中的值。 (我的表單上還有其他字段/值,在更新下拉值時不應該消失。)Symfony篩選表單用於多選下拉列表
我完全不知道如何實現此目的。也許一個AJAX函數會導致解決方案,但我不知道這樣的一個樣子。我會很高興的任何提示! :)
我到目前爲止有:
過濾器的下拉列表中的
市場
類型和
航空公司
他們都是多選下拉菜單。選擇它們後,我想點擊「應用」,然後更新「文件列表」下拉菜單,以便只顯示連接到所選市場/類型或航空公司的文件。
P.S.此外,我喜歡實施的是文檔名稱和ID的搜索框。爲此,我還差得遠的我甚至不正確的元素..
<div class="panel panel-default">
<div class="panel-body">
{{ form_start(filterForm) }}
{{ form_row(filterForm.type) }}
{{ form_row(filterForm.markets)}}
{{ form_row(filterForm.airlines)}}
<input type="submit" class="btn-primary btn btn-xs" value="Apply Filter" />
{{ form_end(filterForm) }}
<br clear="all" />
{{ form_row(form.documentlist) }}
</div>
</div>
更新
我的表格:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->setAction($options['data']['url'])
->setMethod('GET')
->add('type', 'choice', array('choices' => array(
'document_types.contract' => 1,
'document_types.general'=>2,
'document_types.goodwill_policy'=>3,
'document_types.pricesheet'=>4,
'document_types.yq_update'=>5,
'document_types.contract_addendum'=>6),
'choices_as_values' => true, 'label' => 'label.types',
'expanded' => false, 'multiple' => true,
'label' => 'label.type',
'translation_domain' => 'Documents'))
;
$user = $this->tokenStorage->getToken()->getUser();
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($user){
$form = $event->getForm();
// only show specific filters based on user's context
$form->add('airlines', 'entity', array(
'class' => 'AppBundle:Airline', 'property' => 'id',
'query_builder' => function (EntityRepository $er) use ($user) {
$airlines = $user->getAirlines();
return $er->createQueryBuilder('a')
->addOrderBy('a.id', 'ASC')
->andWhere('a.id IN (?1)')
->setParameter(1,$airlines);
},
'choice_value' => 'id',
'choice_label' => 'id', 'label' => 'label.airlines',
'expanded' => false, 'multiple' => true,
'translation_domain' => 'Documents'));
$form->add('markets', 'entity', array(
'class' => 'AppBundle:Market', 'property' => 'id',
'query_builder' => function (EntityRepository $er) use ($user) {
$markets = $user->getMarkets();
return $er->createQueryBuilder('m')
->addOrderBy('m.id', 'ASC');
->andWhere('m.id IN (?1)')
->setParameter(1,$markets);
},
'choice_value' => 'id',
'choice_label' => 'id', 'label' => 'label.markets',
'expanded' => false, 'multiple' => true,
'translation_domain' => 'Documents'))
,這就是下拉列表中,這是應該在選擇之前的下拉菜單後更新其內容。
->add('documentlist', EntityType::class, array(
'class' => 'DocumentBundle:Document',
'property' => 'name',
'expanded' => false, 'multiple' => true,
'label' => 'label.document_list',
'empty_value' => "Select document",
'required' => false,
'mapped' => false,
'translation_domain' => 'Documents'}));
}
你必須有更多的代碼比這個Sonja。你的過濾器複選框?如果是這樣,請使用jQuery或普通的舊Javascript來檢測過濾器複選框的onChange,然後更新下拉列表。如果不顯示更多的表單代碼,就很難提供更多的建議。 –
當然還有更多的代碼!但我不知道哪些部件可以幫助你?我說「他們都是多選下拉菜單」:)所以我可以使用jQuery,但我不知道onChange的功能是怎麼樣的! – sonja
如果您查看了一些以前的問題,並通過正確的答案選中了一個複選標記,那就太好了。我看到你只檢查了一個問題。 –