0

これら 3 つのインスタンスのネストされたフォームを作成しようとしています。ここで、在庫には既定のデータがあり、ネストされたフォームInventoryProductには既定でデータベース内のすべての製品がフォームに含まれています。

  • Inventory( が 1 つ以上あるInventarioProduct) - IdStartDateEndDate
  • InventoryProduct- Id, Product, Units, RejectedUnits,QuarantineUnits
  • Product- IdNameInci、製品からのその他のデータ

したがって、次のように追加しInventoryCrudCrontrollerますcreateEntityMethod

public function createEntity(string $entityFqcn)
    {
        $inventory= new Inventory();
        $inventory->setStartDate(new DateTime('now'));
        $inventory->setEndDate(null);

        $productRepository= $this->entityManager->getRepository(MateriaPrima::class);

        $products= $productRepository->findAll();

        foreach ($products as $product) {
            $inventoryProduct= new InventoryProduct();
            $inventoryProduct->setProduct($product);
            $inventoryProduct->setUnits(0);
            $inventoryProduct->setUnitsRejected(0);
            $inventoryProduct->setUnitsQuarantine(0);
            $inventoryProduct->setInventory($inventory);

            $inventory->addInventarioProduct($inventoryProduct);
        }

そして、configureFieldsメソッド on InventoryCrudCrontroller:

public function configureFields(string $pageName): iterable
    {

        if (Crud::PAGE_EDIT === $pageName || Crud::PAGE_NEW == $pageName) {
            return [
                DateTimeField::new('startDate')
                    ->setColumns(6)
                    ->setValue(new DateTime()),
                DateTimeField::new('endDate')
                    ->setColumns(6),
                CollectionField::new('products', 'Products:')
                    ->onlyOnForms()
                    ->allowAdd()
                    ->allowDelete()
                    ->setEntryIsComplex(false)
                    ->setEntryType(InventoryProductType::class)
                    ->renderExpanded(true)
                    ->setFormTypeOptions(
                        [
                            'by_reference' => false,
                        ]
                    )
                    ->setColumns(12),

InventoryProductTypeそして、税関申告書のクラスを追加します:

class InventoryProducts extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {

        $builder
            ->add(
                'product',
                EntityType::class,
                ['class' => Product::class, 'label' => '-']
            )
            ->add('units')
            ->add('unitsRejected')
            ->add('unitsQuarantine')
            ;
    }

    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'data_class' => InventoryProduct::class,
        ]);
    }
}


別のレジストリを追加しようとすると、次のようになりました。

選択フィールドに渡されるタイプ「App\Entity\Inventory」のエンティティは、管理する必要があります。エンティティマネージャで永続化するのを忘れているのではないでしょうか?

私は何を間違っていますか?

ご協力いただきありがとうございます!!

4

1 に答える 1