Extbase - Objekte handeln: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
Zeile 43: Zeile 43:
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
== Manuell persistieren ==
 +
Normalerweise wird nach Ende einer Action automatisch persistiert. Will man das schon vorher erreichen (um z.b. in der gleichen Action die Änderungen noch anzuzeigen kann man das so machen:
 +
$this->persistenceManager->persistAll();

Version vom 13. Juli 2015, 17:24 Uhr

Objekte erstellen

Wenn das Repository im Controller injected wurde:

$this->miniObjectRepository->add($newMiniObject);
$this->redirect('list');

Kindobjekte erstellen

Hier kann man nicht einfach erstellen sonst ist die Datenbankverbindung nicht vorhanden. Also muß man vorher im View das Mutterobjekt durchschleifen und danach im Controller die Verknüpfung berücksichtigen:

Controller

/**
 * addForm action - displays a form for adding a post
 *
 * @param \Lobacher\Simpleblog\Domain\Model\Blog $blog
 * @param \Lobacher\Simpleblog\Domain\Model\Post $post
 */
public function addFormAction(
        \Lobacher\Simpleblog\Domain\Model\Blog $blog,
        \Lobacher\Simpleblog\Domain\Model\Post $post = NULL) {
    $this->view->assign('blog',$blog);
    $this->view->assign('post',$post);
}

--> Fluid

<f:form action="{action}" object="{post}" name="post" arguments="{blog:blog}" additionalAttributes="{role:'form'}">

--> Controller Wenn man nicht injekten will wie in dem Beispiel muß man über den objectManager gehen um das Elternobjekt (hier den Blog) zu holen.

/**
 * add action - adds a post to the repository
 *
 * @param \Lobacher\Simpleblog\Domain\Model\Blog $blog
 * @param \Lobacher\Simpleblog\Domain\Model\Post $post
 */
public function addAction(
        \Lobacher\Simpleblog\Domain\Model\Blog $blog,
        \Lobacher\Simpleblog\Domain\Model\Post $post) {
    $post->setPostdate(new \DateTime());
    //$this->postRepository->add($post);
    $blog->addPost($post);
$this->objectManager->get(  'Lobacher\\Simpleblog\\Domain\\Repository\\BlogRepository' )->update($blog);
    $this->redirect('show','Blog',NULL,array('blog'=>$blog));
}

Manuell persistieren

Normalerweise wird nach Ende einer Action automatisch persistiert. Will man das schon vorher erreichen (um z.b. in der gleichen Action die Änderungen noch anzuzeigen kann man das so machen:

$this->persistenceManager->persistAll();