[英]Symfony - Filter a form with a CollectionType of Entity
我有兩個實體, client
和order
。
我有一個管理界面,我可以在其中顯示客戶的所有訂單,我可以在其中修改或刪除每個訂單。
為此,我使用集合類型:
我的 controller:
$form = $this->createForm(ClientConfigType::class, $client);
這是我的客戶端配置類型:
<?php
namespace App\Form;
use App\Entity\Client;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class ClientConfigType extends AbstractMainType {
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add("orders",
CollectionType::class,
[
'entry_type' => OrderConfigType::class,
'allow_add' => true,
'label' => false
]);
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults(array(
'data_class' => Client::class,
'allow_extra_fields' => true,
));
}
}
而我的 OrderConfigType 是一個經典的 formType。 沒有任何過濾,一切都運行良好。
但我希望能夠過濾和顯示我的訂單集合類型。 例如,我想顯示特定日期的訂單或訂單 > 100 美元等
我嘗試使用查詢生成器,但它僅適用於 EntityType 而不是 CollectionType 我試圖將變量從我的 Controller 傳遞給我的表單,然后傳遞給我的實體“get”function,如下所示:
$minimumPrice = $request->query->get('minimumPrice');
$form = $this->createForm(ClientConfigType::class, $client, ['minimumPrice' => $minimumPrice ]);
然后在我的 ConfigType 中,我可以在 configureOptions function 中檢索我的變量,但是我無法使用該值來過濾我的集合類型。
如何過濾我的 collectionType?
您可以像想要訂單一樣查詢,而不是傳遞minutePrice
,並將訂單的集合傳遞給表單。
這里的例子:
class ClientConfigType extends AbstractMainType {
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add("orders",
CollectionType::class,
[
'entry_type' => OrderConfigType::class,
'allow_add' => true,
'label' => false,
'data' => $options['orderCollection']
]);
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults(array(
'data_class' => Client::class,
'orderCollection' => null,
));
}
}
$orderCollection = $em->getRepository(Order::class)->findAll(); //something like this or custom query it s an example
$form = $this->createForm(ClientConfigType::class, $client, ['orderCollection' => $orderCollection ]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.