Zum Inhalt springen

Domain Model zu Aggregate Root machen

Erstellt am 28. September 2011 · 1 Antwort · letzte Antwort am 29. September 2011

Tags: Frage

Typo3Cuckoo ·

Hi,

Ich habe nämlich folgendes Problem:

Zwei Domain Models (Model1 und Model2). Model1 ist Aggregate Root. Zwischen den Domain Models besteht eine m:n-Relation. In Model1 kann ich mehrere Model2 Objekte referenzieren.

Ich kann also zu jedem Model1 Objekt alle referenzierten Model2 Objekte finden.

Was aber grad nicht funktionieren will ist, dass ich ein Model2 Repository im Model1 Controller instanziere und mir einfach alle vorhandenen Model2 Objekte ausgebe, also komplett am Aggregate Root vorbei.

<?php

class Tx_MyExt_Controller_Model1Controller extends Tx_Extbase_MVC_Controller_ActionController {

/**
 * seminarInfoRepository
 *
 * @var Tx_MyExt_Domain_Repository_Model2Repository $model2Repository
 */
protected $model2Repository;


/**
 * injectModel2Repository
 *
 * @param Tx_MyExt_Domain_Repository_Model2Repository $model2Repository
 * @return void
 */
public function injectModel2Repository(Tx_MyExt_Domain_Repository_Model2Repository $model2Repository) {
	$this->model2Repository = $model2Repository;
}

public function listAction() {
[...]
	$allModel2Objects = $this->model2Repository->findAll();
	foreach($allModel2Objects as $model2) {
		t3lib_div::debug($model2, '$model2');
	}
[...]
}

}

?>

Im Frontend gibt es keine Debugging-Ausgabe, die foreach-Schleife wird also nicht durchlaufen weil die Variable $allModel2Objects anscheinend leer ist.

Also denke ich, dass ich aus Model2 ebenfalls ein Aggregate Root machen muss, damit ich unabhängig vom Model1 auf Model2 Zugriff erhalte.

Wo muss ich alles Hand anlegen um aus einem bisher "normalen" Domain Model (Model2) ein Aggregate Root zu machen?

Hoffe ihr könnt mir helfen 🙂

Typo3Cuckoo ·

Hi,

habs mal wieder selber rausgefunden 😉

Es lag teilweise an mir, aber teilweise auch an TYPO3! :o

Das Problem lag an der Typoscript Konfiguration für die Storage PIDs in plugin.tx_myext.persistence.storagePid. Ich habe mehrere Sys-Folder angelegt, in welche ich die Datensätze für Model1 und Model2 getrennt von einander speichere:

- Main Storage Folder [PID = 100]
-- Model1 Data [PID = 101]
-- Model2 Data [PID = 102]

Der Fehler lag nun daran, dass ich über den Constants-Editor die PID 100 eingetragen habe und ich davon ausgegangen bin, dass TYPO3 automatisch rekrusiv nach weiteren PIDs sucht. Ich konnte über den Constants-Editor nämlich keine kommaseparierte Liste eintragen, sondern lediglich eine einzige PID. Bin also davon ausgegangen, dass das so seine Richtigkeit hat. Dem war natürlich nicht so! o.O Um über ein Repository auf die jeweiligen Datensätze zugreifen zu können, müssen in plugin.tx_myext.persistence.storagePid alle PIDS stehen. Hab das also von Hand eingetragen und voila! Nun funktioniert es 🙂

Allgemein zu Aggregate Roots:

Ich hab festgestellt, dass die Einstellung Aggregate Root eines Domain Models im Extension Builder keinen wirklichen Unterschied bzgl. der Zugriffsbeschränkung auf untergeordnete Domain Models macht. Das einzige was passiert, wenn man ein Domain Model als Aggregate Root definiert, ist, dass der Extension Builder automatisch alle passenden Controller, Repositories und Templates anlegt. Aber eine wirkliche Zugriffseinschränkung gibt es wohl nicht.

Kann das mal jemand bestätigen bzw. widerlegen? Welchen Unterschied macht diese Einstellung im Extension Builder genau?