Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort des Fachgutachters
Vorwort
1 Einleitung
2 Einführung in eZ Components
3 Die Applikationsbasis
4 Fehlerbehandlung und Debugging
5 Konfiguration
6 Datenbankanbindung
7 ORM mit PersistentObject
8 Template
9 Übersetzung
10 Benutzereingaben validieren
11 Authentifizierung
12 Bildverarbeitung
13 Archive und Dateien
14 Mail
15 Logging
16 Diagramme
17 Feeds und Caching
18 Setup
A Inhalt der Buch-CD
Stichwort
Download: - ZIP, ca. 2,7 MB
Ihre Meinung?
<< zurück | Galileo Computing / <openbook> /eZ Components | vor >>
eZ Components von Tobias Schlitt, Kore Nordmann Das Entwickler-Handbuch
eZ Components geb., mit CD 454 S., 39,90 Euro Galileo Computing ISBN 978-3-8362-1073-7 |
| 7 ORM mit PersistentObject
|  | 7.1 Modell-Klassen
|  | 7.2 Konzepte
|  |  | 7.2.1 Active Record
|  |  | 7.2.2 Row Data Gateway
|  |  | 7.2.3 Persistent Object
|  | 7.3 Konfiguration
|  |  | 7.3.1 Basiskonfiguration
|  |  | 7.3.2 Relationen beschreiben
|  | 7.4 Benutzung
|  |  | 7.4.1 Eine Persistenz-Sitzung erzeugen
|  |  | 7.4.2 Objekte auffinden
|  |  | 7.4.3 Objekte manipulieren
|  | 7.5 Erweiterte Möglichkeiten
|  |  | 7.5.1 Über Abfragen manipulieren
|  |  | 7.5.2 Werte auffrischen
|  |  | 7.5.3 Direkt mit der Datenbank arbeiten
|  | 7.6 Fazit
Die PersistentObject-Komponente bietet Ihnen eine weitere Abstraktionsschicht zwischen dem Datenbanksystem und der Applikationslogik. # 7 ORM mit PersistentObject In Kapitel 6, »Datenbankanbindung«, haben Sie den Zugriff auf ein relationales Datenbanksystem mit Hilfe der Database-Komponente kennengelernt. Nun werden wir Ihnen die PersistentObject-Komponente vorstellen, mit der eine weitere Abstraktionsschicht zwischen dem Datenbanksystem und der Applikationslogik gezogen werden kann. Über sogenanntes Objekt-Relationales-Mapping (ORM) erlaubt es die Komponente PersistentObject, PHP-Objekte (für Sie als Entwickler weitestgehend transparent) in einer relationalen Datenbank abzulegen. Mit Hilfe der Komponente werden Ihnen die typischen Aufgaben beim Zugriff auf Objekte in der Datenbank erleichtert, indem das Laden, Speichern, Löschen, Aktualisieren und Suchen von Objekten auf einfachem Wege ermöglicht wird. ## 7.1 Modell-Klassen Wie Sie bereits aus Kapitel 3, »Die Applikationsbasis«, wissen, baut das GP-Blog auf einer Implementierung des Model-View-Controller-Entwurfsmusters auf, wobei die Controller-Architektur bereits im gleichen Kapitel vorgestellt wurde. In diesem Kapitel widmen wir uns der Umsetzung der Modelle, also den Datenobjekten, welche im Laufe der Applikation von Controller-Objekten manipuliert und von der View dargestellt werden. Das View-Modul wird passend dazu in Kapitel 8, »Template«, entwickelt. Im Galileo-Press-Blog werden drei verschiedene Modell-Klassen verwendet: gpBlogEntry zur Repräsentation eines Blog-Eintrags, gpBlogComment, deren Instanzen einen Kommentar darstellen, und gpBlogTag, mit deren Hilfe ein Tag modelliert wird. Da Objekte dieser Klassen reine Datenspeicher darstellen, sind sie nur sehr rudimentär implementiert, machen allerdings erneut Gebrauch vom Konzept der Virtual Properties, welches Sie bereits in Kapitel 2, »Einführung in eZ Components«, und in Kapitel 3, »Die Applikationsbasis«, kennengelernt haben.
    class gpBlogEntry
    {
        protected $properties = array(
            "id"    => null,
            "body"  => null,
            "date"  => null,
            "title" => null,
        );
        public function __construct()
        {
        }
        public function getState()
        {
            return $this->properties;
        }
        public function setState( array $state )
        {
            foreach ( $state as $propertyName => $propertyValue )
            {
                if ( isset( $this->$propertyName ) )
                {
                    $this->properties[$propertyName] =
                        $propertyValue;
                }
            }
        }
        public function __get( $propertyName )
        {
            if ( isset( $this->$propertyName ) )
            {
                return $this->properties[$propertyName];
            }
            throw new gpBlogPropertyNotFoundException(
                $propertyName
            );
        }
        public function __set( $propertyName, $propertyValue )
        {
            if ( $propertyName === "id" )
            {
                throw new gpBlogPropertyPermissionException(
                    $propertyName,
                    gpBlogPropertyPermissionException::READ
                );
            }
            if ( isset( $this->$propertyName ) )
            {
                $this->properties[$propertyName] = $propertyValue;
                return;
            }
            throw new gpBlogPropertyNotFoundException(
                $propertyName
            );
        }
        public function __isset( $propertyName )
        {
            return array_key_exists(
                $propertyName,
                $this->properties
            );
        }
    }
Listing 7.1 Die gpBlogEntry-Modell-Klasse Die Eintragsklasse implementiert die Overloading-Methoden __get(), __set() und __isset() zum Zugriff auf die Virtual Properties der Klasse: $id, $body, $date und $title. Die Kapselung dieser Attribute mit Hilfe des Virtual-Property-Konzepts erfolgt an dieser Stelle zum Schutz des Attributs $id, welches ausschließlich von der Datenbank vergeben wird. Wie Sie im vorhergehenden Kapitel gesehen haben, verwenden wir einen auto_increment-Mechanismus dafür. Falls versucht wird, das so geschützte Attribut direkt zu verändern, wird eine gpBlogPropertyPermissionException geworfen; der Lese-Zugriff hingegen ist erlaubt. Die genannte Exception erweitert nach dem Konzept, das wir bereits in Kapitel 3, »Die Applikationsbasis«, verwendet haben, lediglich die passende eZ Components-Exception zum Zweck der Unterscheidung beim Fangen der Exceptions im Haupt-Controller. Neben dem Virtual-Property-Zugriff implementiert die gezeigte Modell-Klasse zwei weitere Methoden namens getState() und setState(). Diese werden von PersistentObject verwendet, um den Status eines Objekts zu extrahieren und in die Datenbank zu speichern – getState() beziehungsweise, um auf dem umgekehrten Weg den Status des Objekts wiederherzustellen – setState(). Beide Methoden werden im Interface ezcPersistentObject definiert und arbeiten mit Array-Repräsentationen des Objekt-Status, indem die Attribute des Modells in einem assoziativen Array gespeichert werden, das die Attributnamen als Schlüssel benutzt. getState() gibt diese Objektrepräsentation zurück, setState() verarbeitet sie und setzt die entsprechenden Werte der Objekt-Attribute. Auch in diesen beiden Methoden kommt die Verwendung von Virtual Properties der Entwicklung zugute, denn intern wird sowieso nur mit einem $properties-Array gearbeitet. ### Ihr Kommentar Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück | <top> | vor >>
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung
Buchempfehlungen
| PHP 5.3 und MySQL 5.1
| Besser PHP programmieren
| Webshops mit Magento
| Sichere Webanwendungen
| PHP 5.3 und MySQL 5.1 - Videotraining
| Apache 2
| Suchmaschinen- Optimierung für Webentwickler
| Joomla! 1.5
Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

Copyright © Galileo Press 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

[Galileo Computing]
Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de