Extbase - Objekte handeln

Aus Wikizone
Wechseln zu: Navigation, Suche

Links

Extbase Extensions - Snippets und Glossar

https://typo3.org/api/typo3cms/class_t_y_p_o3_1_1_c_m_s_1_1_extbase_1_1_persistence_1_1_object_storage.html

Objekte abfragen

In m:n Verbindung

$author->getBook()->rewind();
$author->getBook()->current()->getTitle();
// or example with some more functionality
private function getDeviceClassUidFromRma($rma){
	if(count($rma->getMetadevice())){
		$myDevice = $rma->getMetadevice();
		$myDevice->rewind();
		$deviceUid = $myDevice->current()->getDevice()->getDeviceClass()->getUid();
		return $deviceUid;
	}else return false;
}

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 zum Elternobjekt 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();