Best-practice doctrine formular a save

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
erikbalog
Člen | 27
+
0
-

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
+
+3
-

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
+
+1
-

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).

Hug0
Člen | 35
+
+1
-

Ahoj,
já bez problému používám WebChemistry/forms-doctrine.
Díky @Antik

Svaťa Šimara
Člen | 98
+
+1
-

A proč by měla délka kódu vadit? Vždyť formulář nemusí odpovídat entitě 1:1

chap
Člen | 81
+
0
-

Já používám Kdyby/DoctrineForms … sice není aktualizovano, ale binduje pěkně entity na formulář.