Zend_Application bietet eine elegante Möglichkeit seine Zend Framework-Projekte zu initialisieren. Im Allgemeinen sieht die Instanziierung des Zend_Application-Objekts so aus:
$application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); |
Das 2. Argument des Konstruktors erwartet ein Array/Zend_Config-Objekt oder häufiger, wie hier im Beispiel verwendet, einen Pfad zu einer Konfigurationsdatei. Was aber nun wenn man mehrere Konfigurationsdateien laden möchte?
Seit Version 1.10 erlaubt Zend_Application im Array-Argument einen Eintrag mit dem Schlüssel “config”. Der Wert kann ein Array mit beliebig vielen Pfaden zu Konfigurationsdateien sein:
$application = new Zend_Application( APPLICATION_ENV, array( 'config' => array( '/path/to/file1.ini', '/path/to/file2.ini', ) ) ); |
Da ich in meinen Projekten neben der normalen Webanwendung auch Kommandozeilen-Skripte habe, lassen sich so einfach zusätzliche Konfigurationsdateien für den jeweiligen Kontext laden.
In meiner application.ini
stehen bei mir nur noch allgemeine Konfigurations-Optionen wie z.B. für die Datenbankverbindung oder PHP-Settings. Dazu habe ich 2 weitere Konfigurationsdateien: http.ini
und cli.ini
.
So würde bei mir die application.ini
aus dem Quickstart aufgeteilt werden:
application.ini
[production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Application" resources.db.adapter = "PDO_SQLITE" resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook.db" [staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.db.adapter = "PDO_SQLITE" resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook-testing.db" [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.db.adapter = "PDO_SQLITE" resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook-dev.db" |
http.ini
[production] resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.params.displayExceptions = 0 resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" resources.view[] = [staging : production] [testing : production] [development : production] resources.frontController.params.displayExceptions = 1 |
In der http.ini
stehen die Optionen für View-, Layout-, Frontcontroller-Resourcen etc. und andere Web-spezifische Angaben.
cli.ini
[production] [staging : production] [testing : production] [development : production] |
In der cli.ini
stehen alle CLI-spezifischen Angaben.
Meine public/index.php
lädt dann application.ini
und http.ini
:
<?php // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), get_include_path(), ))); /** Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, array( 'config' => array( APPLICATION_PATH . '/configs/application.ini', APPLICATION_PATH . '/configs/http.ini', ) ) ); $application->bootstrap() ->run(); |
Und ein (mögliches) Kommandozeilen-Skript sähe dann so aus:
#!/usr/bin/env php <?php // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Define application environment if (!defined('APPLICATION_ENV')) { if (getenv('APPLICATION_ENV')) { define('APPLICATION_ENV', getenv('APPLICATION_ENV')); } else { if (preg_match('/\/(staging|production)+\//', __FILE__, $matches)) { define('APPLICATION_ENV', $matches[1]); } else { define('APPLICATION_ENV', 'development'); } } } // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), get_include_path(), ))); /** Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap $application = new Zend_Application( APPLICATION_ENV, array( 'config' => array( APPLICATION_PATH . '/configs/application.ini', APPLICATION_PATH . '/configs/cli.ini', ) ) ); $application->bootstrap(); // Do some work here |