Domain Model zu Aggregate Root machen

  • Typo3Cuckoo Typo3Cuck...
    Sternenflotten-Admiral
    0 x
    184 Beiträge
    0 Hilfreiche Beiträge
    28. 09. 2011, 16:55

    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.

    1. <?php
    2.  
    3. class Tx_MyExt_Controller_Model1Controller extends Tx_Extbase_MVC_Controller_ActionController {
    4.  
    5. /**
    6.  * seminarInfoRepository
    7.  *
    8.  * @var Tx_MyExt_Domain_Repository_Model2Repository $model2Repository
    9.  */
    10. protected $model2Repository;
    11.  
    12.  
    13. /**
    14.  * injectModel2Repository
    15.  *
    16.  * @param Tx_MyExt_Domain_Repository_Model2Repository $model2Repository
    17.  * @return void
    18.  */
    19. public function injectModel2Repository(Tx_MyExt_Domain_Repository_Model2Repository $model2Repository) {
    20. $this->model2Repository = $model2Repository;
    21. }
    22.  
    23. public function listAction() {
    24. [...]
    25. $allModel2Objects = $this->model2Repository->findAll();
    26. foreach($allModel2Objects as $model2) {
    27. t3lib_div::debug($model2, '$model2');
    28. }
    29. [...]
    30. }
    31.  
    32. }
    33.  
    34. ?>

    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


  • 1
  • Typo3Cuckoo Typo3Cuck...
    Sternenflotten-Admiral
    0 x
    184 Beiträge
    0 Hilfreiche Beiträge
    29. 09. 2011, 12:20

    Hi,

    habs mal wieder selber rausgefunden

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

    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:

    1. - Main Storage Folder [PID = 100]
    2. -- Model1 Data [PID = 101]
    3. -- 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! 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?

  • 1