Zend_Application_Module_Autoloader benutzen

Alle Zend Module manuell in der „Bootstrap.php“ zu initialisieren kann auf Dauer anstregend sein. Aus diesem Grund wurde der Zend_Application_Module_Autoloader erfunden. Damit können nach einem festen Standard die einzelnen Module dynamisch geladen werden.

Wie das geht zeige ich an einem Beispiel aus „/application/models„.

Quellcode:

/application/Bootstrap.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
 
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initAutoloader()
    {
        $moduleLoader = new Zend_Application_Module_Autoloader
	(
            array
            (
                'namespace' => '',
                'basePath' => APPLICATION_PATH
            )
        );
    }

Durch diese Deklaration sucht der Zend Autoloader automatisch im Ordner „/models“ nach Modellen, im Ordner „/forms“ nach Formularen und im Ordner „/acl“ nach Zugriffskontrolllisten. Dazu müssen die jeweiligen Klassen aber einer bestimmten Benennung folgen und auch so eingesetzt werden. Ein Model für einen „User“ muss demnach wie folgt abgespeichert und definiert werden:

/application/models/User.php

1
2
3
4
<?php
class Model_User
{
...

Laut der Autoloader-Referenz haben Model-Klassen eine Besonderheit, und zwar darf bei ihrem Dateinamen nicht das Prefix „Model_“ gesetzt werden, obwohl es im Klassennamen erforderlich ist. Bei Formularen und Zugriffskontrolllisten muss ein Prefix gesetzt werden.

Um das „User“-Modul in einem Controller zu verwenden, muss es über seinen Klassennamen erzeugt werden.

/application/controllers/UserController.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
 
class UserController extends Zend_Controller_Action
{
 
    public function init()
    {
        /* Initialize action controller here */
    }
 
    public function indexAction()
    {
		$db = new Model_User();
    }
}

Ein Gedanke zu „Zend_Application_Module_Autoloader benutzen“

  1. So wie ich das verstehe, ist das einzige, dass man hier gewinnt, dass man statt

    $db = new Application_Model_User();
    (so wie die Klasse User in /application/models/User.php normalerweise angesprochen werden müsste)

    nur noch
    $db = new Model_User();

    schreiben muss. Oder hab ich das was falsch verstanden?

    Wie muss ich den Autoloader denn konfigurieren, damit er auch auch Klassen aus eigenen Modulen (also NICHT „application“ – das ist ja quasi das Standardmodul) auto-lädt?

    Zum Beispiel eine Klasse ‚Beispiel‘ aus dem Modul ‚Mein‘:
    Pfad: /application/modules/mein/models/Beispiel.php
    Klassenname: Mein_Model_Beispiel

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.