Konsolenanwendungen werden in einer Webanwendung hauptsächlich für Offline-Arbeiten verwendet, wie z.B. zur Code-Generierung, zum Erstellen eines Suchindex, zum Verschicken von E-Mails etc. Yii bietet ein Framework zur systematischen objektorientierten Erstellung von Konsolenanwendungen.
Jeder Konsolenbefehl wird in Yii durch ein Kommando repräsentiert. Eine Konsolenanwendung wird wiederum verwendet, um einen Aufruf von der Kommandozeile an das entsprechende Kommando weiterzuleiten. In einem Eingangsscript wird eine Instanz der Applikation erstellt. Um einen Konsolenbefehl aufzurufen, führen wir an der Kommandozeile einfach folgenden Befehl aus:
php eingangsScript.php KommandoName Param0 Param1 ...
KommandoName
bezieht sich hier auf den Namen des Kommandos wobei
Groß-/Kleinschreibung nicht berücksichtigt wird. Param0
, Param1
usw.
sind Parameter, die an die Instanz des Kommandos übergeben werden.
Das Eingangsscript einer Konsolenanwendung sieht ähnlich wie das einer Webanwendung aus:
defined('YII_DEBUG') or define('YII_DEBUG',true);
// Einbinden der Yii-Startdatei
require_once('pfad/zum/yii/framework/yii.php');
// Erstellen und Starten der Applikations-Instanz
$configFile='pfad/zur/config/datei.php';
Yii::createConsoleApplication($configFile)->run();
Danach müssen wir von CConsoleCommand abgeleitetete Kommandoklassen
erstellen. Jede Kommandoklasse sollte wie das entsprechende Kommando heißen,
ergänzt um Command
. So würde z.B. eine Klasse EmailCommand
ein Kommando
email
zu definieren. Alle Kommandoklassen sollten
in einem Unterverzeichnis commands
im
Stammverzeichnis
der Anwendung abgelegt werden.
Tipp: Verwendet man CConsoleApplication::commandMap, können Kommandoklassen auch anderen Namenskonventionen folgen und an anderen Orten liegen.
Im Wesentlichen bedeuted das Schreiben einer Kommandklasse, die Methode CConsoleCommand::run zu implementieren. Kommandozeilenparamter werden als Array an diese Methode übergeben. Hier ein Beispiel:
class EmailCommand extends CConsoleCommand
{
public function run($args)
{
$receiver=$args[0];
// Email an $receiver senden
}
}
In einer Konsolenanwendung können wir jederzeit über Yii::app()
auf die
Anwendungsinstanz zugreifen. Eine Konsolenanwendung kann genauso wie eine
Webanwendung konfiguriert werden. Wir können zum Beispiel eine
Anwendungskomponente db
konfigurieren, um auf eine Datenbank zuzugreifen.
Die Konfiguration liegt in der Regel als PHP-Datei vor, deren Pfad an den
Konstruktor der Konsolenanwendung übergeben wird (bzw. im Eingangsscript an
createConsoleApplication).
yiic
-Befehls ¶Wir haben den yiic
-Befehl bereits verwendet, um unsere erste Yii-Anwendung
zu erstellen. Tatsächlich ist der yiic
-Befehl
eine Konsolenanwendung mit dem Eingangsscript framework/yiic.php
. Mit yiic
können wir das Grundgerüst einer Webanwendung anlegen, Controller- und
Modelklassen erstellen, Code für CRUD-Operationen erzeugen, zu übersetzende
Textnachrichten extrahieren etc.
Wir können yiic
um eigene Kommandos ergänzen. Dazu sollten wir zunächst
das Gerüst für eine Webanwendung erstellen, wie im Kapitel Erstellen der
ersten Yii-Anwendung beschrieben. Der Befehl
yiic webapp
erzeugt zwei Dateien im protected
-Verzeichnis: yiic
und
yiic.bat
. Das sind lokale Versionen des yiic
-Befehls, die speziell für
diese Webanwendung erstellt wurden.
Wir können unsere eigenen Kommandos im protected/commands
-Verzeichnis
ablegen. Wenn wir den yiic
-Befehl ausführen, sehen wir, dass neben den
normalen auch unsere Befehle auftauchen. Wir können auch Kommandos für den
Einsatz mit yiic shell
erstellen. Dazu muss unsere Kommandoklasse im
Verzeichnis protected/commands/shell
abgelegt werden.
Signup or Login in order to comment.