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ář.