datagrid icon indicating copy to clipboard operation
datagrid copied to clipboard

Doctrine form mapper compatibility

Open rendix2 opened this issue 2 years ago • 1 comments
trafficstars

Zdravíčko.

Používám freezy-bee/doctrine-form-mapper pro vytvoření doctrine entity z dat z formuláře. Příklad použití v presenteru

formSuccess(Form $form) : void
{
    $nameEntity = $this->em->getRepository(NameEntity::class)->find($id);
    $nameEntity = $this->doctrineFormMapper->save($nameEntity, $form);

    $this->em->persist($nameEntity);
    $this->em->flush();
}

Využívám tedy toho, že ve formuláři je event onSuccess, do které se posílá instance formuláře, ze které se pak sestaví doctrine entita. Bohužel pro tyto účely datagrid v případě velké editace posílá id a data a případě velkého přidávání posílá jen data. Tím zmíněnou knihovnu nedokážu použít a musím entitu sestavovat ručně. Příklad

$this->dataGrid->getInlineAdd()->onSubmit[] = function (ArrayHash $values) : void {
    $genusEntity = $this->em->getRepository(GenusEntity::class)->find($values->genus);
    $personEntity = $this->em->getRepository(PersonEntity::class)->find($values->person);

    $nameEntity = new NameEntity();
    $nameEntity->name = $values->nameName;
    $nameEntity->surname = $values->nameSurname;
    $nameEntity->genus = $genusEntity;
    $nameEntity->untilNow = $values->untilNow;
    $nameEntity->dateSince = $values->dateSince;
    $nameEntity->dateTo = $values->dateTo;
    $nameEntity->person = $personEntity;

    $this->em->persist($nameEntity);
    $this->em->flush();
};

Šlo by přidat klidně jinou událost (ať nevznikne BC break), do které se pošle Formulář/Container? Klidně s tim nějak pomůžu

rendix2 avatar Jul 04 '23 16:07 rendix2

@rendix2 Ahoj, tohle mi nedává moc smysl. Nejsprávnější řešení je, aby datagrid předával nějakou data class místo ArrayHash

radimvaculik avatar Jul 10 '23 10:07 radimvaculik