Start · Sprachen · PHP · Referenz · Yaf_Application

Yaf_Application

Klasse

Repräsentiert die gesamte Yaf-Anwendung und steuert deren Lebenszyklus, Konfiguration und Bootstrap-Prozess.

seit PHP 2.0.0 Kategorie: misc

Signatur

class Yaf_Application

Beschreibung

Yaf_Application ist das zentrale Singleton-Objekt des Yaf-Frameworks (Yet Another Framework). Es liest die Anwendungskonfiguration aus einer INI-Datei oder einem Array, initialisiert alle notwendigen Ressourcen und steuert den Ablauf vom Einlesen der Anfrage bis zur Ausgabe der Antwort.

Die Klasse implementiert das Singleton-Muster: Es kann immer nur eine Instanz existieren. Über die statische Methode Yaf_Application::app() kann von überall im Code auf diese Instanz zugegriffen werden. Das Objekt wird typischerweise in der index.php (dem Front-Controller) erzeugt.

Der typische Anwendungsablauf sieht so aus: Yaf_Application wird instanziiert, optional wird ein Bootstrap ausgeführt (mit bootstrap()), und anschließend wird die Anfrage mit run() abgearbeitet. Das Framework kümmert sich dann automatisch um Routing, Dispatch und Controller-Ausführung.

  • Konfiguration: Akzeptiert einen Pfad zu einer INI-Datei oder ein PHP-Array als Konfiguration.
  • Bootstrap: Über bootstrap() können eigene Initialisierungsroutinen (z. B. Plugin-Registrierung) ausgeführt werden.
  • Umgebung: Unterstützt verschiedene Umgebungen (product, develop etc.) über den zweiten Konstruktor-Parameter.

Parameter

Name Typ Default Beschreibung
$config Pflicht string|array Pfad zu einer INI-Konfigurationsdatei (String) oder ein assoziatives Array mit Konfigurationswerten. Muss mindestens den Schlüssel application.directory enthalten.
$environ string product Name der Umgebung, deren Konfigurationsabschnitt aus der INI-Datei gelesen wird. Standardwert ist product. Typische Werte sind develop, test, product.

Beispiele

Minimale Yaf-Anwendung mit INI-Konfiguration

<?php
// public/index.php

define('APP_PATH', dirname(__DIR__));

// INI-Konfiguration: application/conf/application.ini
// [product]
// application.directory = APP_PATH "/application"
// application.modules   = "Index,Admin"

$app = new Yaf_Application(APP_PATH . '/conf/application.ini');
$app->run();

Anwendung mit Array-Konfiguration und Bootstrap

<?php
// public/index.php

define('APP_PATH', dirname(__DIR__));

$config = [
    'application' => [
        'directory' => APP_PATH . '/application',
        'dispatcher' => [
            'catchException' => true,
        ],
        'modules' => 'Index,Admin',
    ],
];

$app = new Yaf_Application($config, 'develop');

// Bootstrap ausführen (ruft alle _init*-Methoden in Bootstrap.php auf)
$app->bootstrap()->run();

// Von einer anderen Stelle in der Anwendung auf die Instanz zugreifen:
$sameApp = Yaf_Application::app();
echo $sameApp->environ(); // develop
develop

Yaf-Anwendung mit Fehlerbehandlung über Exception

<?php
define('APP_PATH', '/var/www/myapp');

try {
    $app = new Yaf_Application([
        'application' => [
            'directory' => APP_PATH . '/application',
        ],
    ]);
    $app->run();
} catch (Yaf_Exception $e) {
    echo 'Yaf-Fehler: ' . $e->getMessage();
} catch (Exception $e) {
    echo 'Allgemeiner Fehler: ' . $e->getMessage();
}

// Wichtig · Fallstricke

Singleton-Verhalten: Es kann nur eine Instanz von Yaf_Application pro Prozess existieren. Der Versuch, eine zweite Instanz zu erstellen, löst eine Yaf_Exception aus. Nutze stattdessen Yaf_Application::app() für den Zugriff auf die bestehende Instanz.

Pflichtfelder in der Konfiguration: Die Konfiguration muss zwingend application.directory enthalten (absoluter Pfad zum Anwendungsverzeichnis), sonst wirft Yaf eine Exception beim Instanziieren.

Umgebungsabhängige INI-Sektionen: Bei INI-Dateien entspricht der environ-Parameter dem Sektionsnamen. Abschnitte können mittels Doppelpunkt-Vererbung definiert werden, z. B. [develop : product].

Yaf als PECL-Extension: Yaf_Application ist Teil der Yaf-Erweiterung (pecl install yaf) und steht nur zur Verfügung, wenn diese in der php.ini geladen ist (extension=yaf.so).