Best-practice doctrine formular a save
- erikbalog
- Člen | 27
Zdravím mam formular a facade kde chcem spracovat formular ale ten kod sa mi zda prilis dlhy.. aky na to mate nazor ako by som ho mohol inak prepisat aby bol best-practice
vo formulari>
public function addMovieSucceeded(UI\Form $form, $values)
{
try {
if(!$this->movie)
$this->movie = new Entities\Movie();
$this->movie->title = $values->title;
$this->movie->id_csfd = $values->id_csfd;
$this->movie->country = $values->country;
$this->movie->year = $values->year;
$this->movie->length = $values->length;
$this->movie->description = $values->description;
$this->movieFacade->save($this->movie);
$this->presenter->flashMessage('Movie added');
} catch(\PDOException $e) {
$form->addError($e->getMessage());
}
}
a v facade
public function save(Entities\Movie $movie)
{
$this->em->persist($movie);
$this->em->flush();
}
dakujem
- enumag
- Člen | 2118
Jsi na dobré cestě. Mně vadilo duplikované přiřazování – jednou tam pro default data do formu a pak zpátky pro ukládání. Zkrátil jsem to tak že si v tom formu definuju pole properties co se mají takhle snadno přiřadit a pak jen zavolám takovouhle util classu: https://gist.github.com/…960b66d050c9 Nevím jestli bych to nazval best practice, ale dokud jsem používal nette/forms tak mi to vyhovovalo.
Editoval enumag (8. 10. 2016 22:44)
- ZahorskyJan
- Člen | 59
Já používám metodu hydrate z doctrine-module (https://github.com/…ctrineModule).
$hydrator = new DoctrineModule\Stdlib\Hydrator\DoctrineObject($entityManager);
$hydrator->hydrate($data, $entity);
$entityManager->flush();
Při update se musí z dat odstranit primární klíče a musel jsem přepsat metodu DoctrineObject::extractByValue, aby uměla gettery/settery pomocí Nette\Object.
Mám to celé v BaseService a potom do ní jenom pošlu pole s daty (samotné hodnoty a pro vazbu klidně celou entitu).
- chap
- Člen | 81
Já používám Kdyby/DoctrineForms … sice není aktualizovano, ale binduje pěkně entity na formulář.