contributte / datagrid

:muscle: DataGrid for Nette Framework: filtering, sorting, pagination, tree view, table view, translator, etc
https://contributte.org/packages/contributte/datagrid/
MIT License
290 stars 193 forks source link

Doctrine form mapper compatibility #1087

Open rendix2 opened 1 year ago

rendix2 commented 1 year ago

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

radimvaculik commented 1 year ago

@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