Free Trial

Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.


  • Create BookmarkCreate Bookmark
  • Create Note or TagCreate Note or Tag
  • DownloadDownload
  • PrintPrint
Share this Page URL
Help

4. Eine erste Extension anlegen > Das Domänenmodell anlegen

Das Domänenmodell anlegen

Die Domäne unserer ersten Extension ist sehr schlicht. Der wesentliche Begriff unserer Domäne ist das »Produkt«. Alle für uns wichtigen Eigenschaften eines Produkts und dessen »Verhalten« werden in einer Klasse mit dem Namen Tx_Inventory_Domain_Model_Product definiert. Der Code dieser Klasse wird in einer Datei mit dem Namen Product.php abgelegt. Der Name der Datei ergibt sich durch Anhängen von .php an den letzten, durch Unterstrich abgetrennten Teil des Klassennamens. Diese Klassendatei wird im Ordner EXT:inventory/Classes/Domain/Model/ abgelegt.

Tipp

Die Bezeichnungen der Klassen müssen in jedem Fall die Ordnerstruktur widerspiegeln. Extbase erwartet z.B. die Klasse Tx_MyExtension_ErsterOrdner_ZweiterOrder_File im Ordner my_extension/Classes/ErsterOrdner/ZweiterOrdner/File.php. Achten Sie auch auf die entsprechende Großschreibung der Ordnernamen.

Werfen wir nun einen Blick in diese Datei. Beachten Sie, dass die Klasse Tx_Inventory_Domain_Model_Product von der Extbase-Klasse Tx_Extbase_DomainObject_AbstractEntity abgeleitet werden muss.

<?php
class Tx_Inventory_Domain_Model_Product extends Tx_Extbase_DomainObject_AbstractEntity {

      /**
       * @var string
       **/
       protected $name = '';

       /**
        * @var string
        **/
       protected $description = '';

       /**
        * @var int
        **/
       protected $quantity = 0;

       public function __construct($name = '', $description = '', $quantity = 0) {
            $this->setName($name);
            $this->setDescription($description);
            $this->setQuantity($quantity);
       }

       public function setName($name) {
           $this->name = (string)$name;
       }

       public function getName() {
           return $this->name;
       }

       public function setDescription($description) {
           $this->description = (string)$description;
       }

       public function getDescription() {
           return $this->description;
       }

       public function setQuantity($quantity) {
           $this->quantity = (int)$quantity;
       }

       public function getQuantity() {
           return $this->quantity;
       }

}
?>

Die Eigenschaften (Properties) sind als Klassenvariablen $name, $description und $quantity angelegt und durch das Schlüsselwort protected vor direkten Zugriffen von außen geschützt (gekapselt). Die Eigenschaftswerte können nur über die als public deklarierten Methoden setProperty() und getProperty() gesetzt bzw. ausgelesen werden. Methoden in dieser Form werden sehr häufig verwendet und daher kurz Getter und Setter genannt.

Tipp

Auf den ersten Blick erscheinen Methoden für den Zugriff auf Klassenvariablen umständlich zu sein. Sie haben aber mehrere Vorteile: Die Interna der Verarbeitung können zu einem späteren Zeitpunkt hinzugefügt oder geändert werden, ohne dass dazu Änderungen am aufrufenden Objekt vorgenommen werden müssten. Es kann auch z.B. das Auslesen erlaubt werden, ohne dass man gleichzeitig schreibenden Zugriff erlaubt. Die etwas lästige Arbeit, diese Methoden zu schreiben, nimmt Ihnen später der Kickstarter ab. Außerdem bieten die meisten Entwicklungsumgebungen Makros oder Snippets für diesen Zweck an. Beachten Sie auch, dass Extbase zu verschiedenen Zeitpunkten intern versucht, eine Eigenschaft $name über eine Methode setName() zu befüllen.

Die Methode __construct() dient dazu, einen wohldefinierten Zustand am Anfang des Lebenszyklus des Objekts sicherzustellen. Hier werden die Eigenschaften des Produkts gesetzt bzw. mit Werten vorbelegt.

Warnung

In der Deklaration des Konstruktors wird das Argument $name mit einem Standardwert (leerer String) vorbelegt und damit optional. Das ist notwendig, damit Extbase die Klasse »leer« instanziieren kann, ohne einen Namen übergeben zu müssen. Damit verstößt Extbase gegen die reine Lehre, da der Konstruktor eigentlich die Minimalkonfiguration des Objekts Organisation sicherstellen soll. Bei Extbase wird dies aber besser über sogenannte Validatoren erledigt (siehe dazu den Abschnitt „Domänenobjekte validieren“ in Kapitel 9).