簡體   English   中英

Symfony - 使用 CollectionType 實體過濾表單

[英]Symfony - Filter a form with a CollectionType of Entity

我有兩個實體, clientorder

我有一個管理界面,我可以在其中顯示客戶的所有訂單,我可以在其中修改或刪除每個訂單。

為此,我使用集合類型:

我的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM