[TYPO3-german] Extbase: Model mit eigener Methode -> wie von array nach objext umwandeln?

Robert Wildling rowild at gmx.net
Sat Sep 7 19:22:14 CEST 2013


Hi, liebe ExtbaselerInnen,

In meiner kleinen Event-Extension sieht es so aus, dass innerhalb eines 
Events (zB ein Theaterfestival) mehrere Veranstaltungen (theatre 
perfomances) sein können. Jede Performance wiederum kann aus einer 
Aneinanderreihung einzelner kleiner Stücke bestehen. Das ganze ist mit 
m:m-Realtionen gelöst:

Event <-m:m-> Performaces <-m:m-> Pieces

Schematische Darstellung des gewünschten Zielergebnisses:

Event
- Performance 2
-- piece 1
-- piece 2
-- piece 3
- Performance 2
-- piece 1
-- piece 2
-- piece 3

Nun sollen auf einer separaten Seite *alle* "pieces" angezeigt werden, 
möglichst in alphabetischer Reigenfolge (die Performances sollen *nicht* 
angezeigt werden):

Event
- piece 1
- piece 2
- piece 3
- piece 4
- piece 5
- piece 6

Dazu versuche ich nun, im Event-Model eine Methode einzubauen, die 
getPieces heißt und die aus allen zu diesem Event gehörnenden 
Performaces alle Stücke lesen und sortieren soll. Da häng ich jetzt 
aber: denn soweit ich weiß, muss das Objekt zunächst mal in ein Array 
umgewandelt, dann durch die Array-Funktionen geschickt und schließlich 
wieder in ein Objekt umgewandelt werden. Ich weiß nicht, wie das in 
Extbase 6.1 gehen soll. Bisher habe ich nur das - die Kommentare 
beschreiben meine Probleme:

class Events extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
     /**
      * Performances that take place within this event
      * @var 
\TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Rowild\Theaterevents\Domain\Model\Performances>
      */
     protected $performances;

     /**
      * pieces: get all the pieces from all the performances
      * @var 
\TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Rowild\Theaterevents\Domain\Model\Pieces>
      */
     protected $pieces;

     [...]
     protected function initStorageObjects() {
         $this->performaces = new 
\TYPO3\CMS\Extbase\Persistence\ObjectStorage();
         // muss hier für pieces noch ein eigenes storage initiiert werden??
     }

         /**
      * Returns the performaces
      * @return 
\TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Rowild\Theaterevents\Domain\Model\Concerts> 
$performaces
      */
     public function getPerformaces() {
         return $this->performaces;
     }

     /**
      * Returns the pieces
      *
      * @ return 
\TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Rowild\Theaterevents\Domain\Model\Compositions> 
$premieres
      */
     public function getPieces() {
         $pieces = $this->getPieces();
        // $pieces = $this->getPieces()->toArray(); // ? toArray scheint 
es nicht mehr zu geben in Extbase 6.*

         foreach ($pieces as $piece) {
             var_dump(get_object_vars($piece)); // spuckt nichts aus
             $array[] = json_decode(json_encode($piece), true); // detto

             //$ua[] = $this['pieces']['title']; // das ist der 
Array-Ansatz, der bei Objekten aber nicht funktioniert
             // TODO: Doppelte entfernen.
         }
         //print_r($array);
         return $pieces;
     }
}


Wie muss ich denn diese Funktion getPieces gestalten, um zunöchst ein 
Array und dann wieder ein Objekt zu bekommen?
Ich bitte um Tipps, Links, etc!

Vielen Dank!
Beste Grüße
Robert


More information about the TYPO3-german mailing list