これら 3 つのインスタンスのネストされたフォームを作成しようとしています。ここで、在庫には既定のデータがあり、ネストされたフォームInventoryProduct
には既定でデータベース内のすべての製品がフォームに含まれています。
Inventory
( が 1 つ以上あるInventarioProduct
) -Id
、StartDate
、EndDate
InventoryProduct
-Id
,Product
,Units
,RejectedUnits
,QuarantineUnits
Product
-Id
、Name
、Inci
、製品からのその他のデータ
したがって、次のように追加し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」のエンティティは、管理する必要があります。エンティティマネージャで永続化するのを忘れているのではないでしょうか?
私は何を間違っていますか?
ご協力いただきありがとうございます!!