Folgende Warnungen sind aufgetreten:
Warning [2] Undefined array key "dateline" - Line: 1000 - File: inc/functions_post.php PHP 8.2.18 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/functions_post.php 1000 errorHandler->error_callback
/inc/functions_post.php 834 get_post_attachments
/showthread.php 913 build_postbit




Das Zend Framework
#2
Die in Part I erstellte .htaccess Datei leitet ja nun alle Anfragen an die index.php weiter. Und diese Datei muss dann ja folglich alle Anfragen bearbeiten. Dazu müssen wir ein paar Sachen im Kopf behalten :

Wir wollen unsere Anwendung immer erweitern können ohne die Bootstrap großartig umschreiben zu müssen.
Nicht nur wir, sondern auch PHP arbeitet von oben nach unten. D.h. wir können nicht erst die Usererkennung machen und dort eine Datenbankverbindung benutzen und erst danach die Datenbankverbindung herstellen.

Also als Schema sollte das ganze so aussehen :

  1. Included Path von PHP erweitern
  2. ZEND Klassen laden
  3. Configurationen machen
  4. Datenbankverbindung herstellen
  5. Userauthentifizierung
  6. Layout
  7. Zend Front Controller statklar machen & starten
    [/list=1]

    Included Path :
    [code=php]
    set_include_path('.' . PATH_SEPARATOR . 'library'
    . PATH_SEPARATOR . get_include_path());
    [/code]
    Da der komplette Zend Library Ordner ja im libraray Ordner liegt und wir nicht alle Klassen extra über require_once einfügen möchten fügen wir diesen Ordner zum include_path von PHP hinzu.
    Später werden hier noch einige Sachen folgen.
    Wenn z.B. eigene Plugins geschrieben werden, oder Datenbank"models" folgen.
    Doch dazu später mehr.

    ZEND Klassen laden :
    [code=php]
    require_once "Zend/Loader.php";
    Zend_Loader::registerAutoload();
    [/code]
    Die Klasse Zend_Loader kann mithilfe der Funktion registerAutoload alle benötigten Klassen includen ohne das wir auch nur eine weitere Zeile schreiben müssen
    Magic Wink

    Configurationen machen :
    [code=php]
    $cfg = new Zend_Config_Ini('application/etc/app.ini', 'dev');
    [/code]
    Dieser Abschnitt ist besonders interessant für alle Leute die lokal auf Ihrem PC entwickeln und das ganze dann nur noch hochladen wenns fertig ist.
    Die lokale Datenbank hat aber andre Logindaten als die Onlinedatenbank Ihres Hosts.
    Was tun ?
    Zend schafft Abhilfe. Mit Zend Config lässt sich der Aufwand auf ein minimum redizieren.
    Wir erstellen also folgende Datein und Ordner
    Code:
    /htdocs
    -/application
    --/etc
    ---app.ini
    [...]
    Inhalt der app.ini :
    Code:
    database.adapter = "pdo_mysql"
    database.params.username = "onlineusername"
    database.params.password = "onlinepasswort"
    database.params.dbname = "datenbankname"
    [dev : live]
    database.params.username    = "lokalerusername"
    database.params.password    = "lokalespasswort"

    Datenbankverbindung herstellen :
    [code=php]
    $db = Zend_Db::factory($cfg->database);
    Zend_Db_Table_Abstract:ConfusedetDefaultAdapter($db);
    $db->getConnection();
    [/code]
    Nun können wir eine Instanz von Zend_Db ganz einfach erstellen.
    Wir übergeben einfach die Logindaten der Datenbank aus unserer Konfiguartionsdate an die function factory.
    Nun setzten wir diese Datenbankverbindung noch als Standart für spätere Models etc. und schließlich stellen wir eine öffnen wir eine Verbindung mit getConnection().

    Userauthentifizierung :
    [code=php]
    $auth = Zend_Auth::getInstance();
    $acl = new MyWork_myacl($auth);
    [/code]
    Dazu ein extra Part später Wink

    Layout :
    [code=php]
    Zend_Layout:ConfusedtartMvc(array(
    'layoutPath' => 'application/layouts',
    'layout' => 'frontend'));
    $view = Zend_Layout::getMvcInstance()->getView();
    $view->doctype('XHTML1_TRANSITIONAL');
    [/code]
    Auch hierzu folgt später noch eine genauere Beschreibung.
    Nur soviel :
    Wir erstellen einen neuen Ordner namens layout und dort eine Datei namens frontend.phtml
    In dieser Datei können wir dann das Design coden ohne viel PHP Code im Weg zu haben.

    Front Controller :
    [code=php]
    try{
    $front = Zend_Controller_Front::getInstance();
    $front->addModuleDirectory('application/modules')
    // Folgendes Plugin hat mit der Userauthentifizierung zusammen und wird später genauer beleuchtet
    ->registerPlugin(new MyWork_myauth($auth, $acl))
    ->dispatch();
    }catch(Zend_Controller_Exception $e){
    echo"ControllerError<br />".$e;
    }catch(Exception $e){
    echo"Error<br />".$e;
    }
    [/code]
    Vorab eine kleiner Hinweis :
    Vom Frontcontroller hängt die ganze Seite ab. Dieser steuert das Routing ( also welche Seite im Endeffekt aufgerufen wird ) Dementsprechend gibt es hier ein vielzahl von Kongurationsmöglichkeiten.
    Ich empfehle also einen Blick ins Manual [de] zu werfen.

    Eine Instanz der Klasse erhalten wir mit dem Aufruf von getInstance(). Nun definieren wir nun den Pfad zu dem Modules und mit dem Aufruf von dispatch() wird die ganze Sache gestartet.
    Wenn ich Zeit und Lust hab folgt evtl. später noch eine Part nur zum Frontcontroller Wink

    Ich hab nochmal die komplette Datei so wie sie nun aussehen sollte hochgeladen.
    So wie die datei nun ist, so ist das noch lange nicht perfekt.
    Später werden noch sinnvolle Erweiterungen gemacht.
    In den späteren Parts wird dann eine neue Version der Bootstrap Datei hochgeladen !


    Last Update : 26.09


Angehängte Dateien
.zip   index.zip (Größe: 679 Bytes / Downloads: 438)
greetings,
Moritz

Follow me on twitter !
  Zitieren


Nachrichten in diesem Thema
Das Zend Framework - von Futjikato - 22.09.2008, 21:00
Part II | Bootstrap Datei - von Futjikato - 24.09.2008, 16:05
Part III | Erste Seite(n) - von Futjikato - 24.09.2008, 18:36
Part IV | Userauthentifizierung - von Futjikato - 26.09.2008, 21:06
[Kein Betreff] - von kickedINtheHEAD - 27.09.2008, 10:43
[Kein Betreff] - von Futjikato - 27.09.2008, 11:20
[Kein Betreff] - von KingGO - 27.09.2008, 17:54
[Kein Betreff] - von Futjikato - 28.09.2008, 21:25
[Kein Betreff] - von Futjikato - 03.10.2008, 19:31

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste