Konsolapplikationer används huvudsakligen av webbapplikationer till att utföra offline-arbete, så som kodgenerering, kompilering av sökindex, skicka mail, etc. Yii erbjuder ett ramverk för att skriva konsolapplikationer på ett objektorienterat och systematiskt sätt.
Yii representerar varje konsoluppgift i termer av kommando, och en konsolapplikations-instans används för att skicka ut en kommandorads-request till ett passande kommando. Applikationsinstansen skapas i ett startskript. För att utföra en konsol-uppgift, kör man helt enkelt det motsvarande kommandot från kommandoraden på följande sätt,
php entryScript.php CommandName Param0 Param1 ...
där CommandName
refererar till kommandots namn, vilket inte är känsligt för skiftläge (case-insensitive),
och Param0
, Param1
och så vidare är parametrar som skall lämnas med till kommandoinstansen.
Startskriptet för en konsolapplikation är vanligtvis skrivet snarlikt det följande, inte olikt det som tillhör en webbapplikation,
defined('YII_DEBUG') or define('YII_DEBUG',true);
// include Yii bootstrap file
require_once('path/to/yii/framework/yii.php');
// create application instance and run
$configFile='path/to/config/file.php';
Yii::createConsoleApplication($configFile)->run();
Sedan skapar vi kommandoklasserna som skall ärva från och utvidga
CConsoleCommand. Varje kommandoklass skall ha samma namn som dess
kommandonamn, med tillägget Command
. Till exempel, för att definiera ett
email
-kommando skall en EmailCommand
-klass skrivas. Alla kommandoklassfiler
bör placeras under commands
, en underkatalog till applikationens
rotkatalog.
Tips: Genom konfigurering av CConsoleApplication::commandMap kan man även ha kommandoklasser med andra namngivningskonventioner och placerade i andra kataloger.
Att skriva en kommandoklass involverar huvudsakligen implementering av metoden CConsoleCommand::run. Kommandoradsparametrar lämnas till denna metod i form av en array. Nedan följer ett exempel:
class EmailCommand extends CConsoleCommand
{
public function run($args)
{
$receiver=$args[0];
// send email to $receiver
}
}
Vid varje tillfälle i ett kommando kan konsolapplikationens instans kommas åt
via Yii::app()
. I likhet med en webbapplikationsinstans, kan även en
konsolapplikation konfigureras. Till exempel, kan en applikationskomponent db
konfigureras för tillgång till en databas. Konfigurationen specificeras
vanligtvis som en PHP-fil och lämnas till konstruktorn för konsolapplikationens
klass (eller createConsoleApplication i startskripetet).
yiic
¶Vi har använt yiic
-verktyget för att skapa en första
applikation. Faktum är att verktyget yiic
är
implementerat som en konsolapplikation vars startskriptfil är
framework/yiic.php
. Genom att använda yiic
, kan vi utföra uppgifter såsom
skapa ett skelett till en webbapplikation, generera en kontroller- eller
modellklass, generera kod som behövs för att utföra CRUD-operationer, extrahera
meddelanden som skall översättas, etc.
Verktyget yiic
kan utökas genom tillägg av egna anpassade kommandon. För att
göra så, börjar vi med ett applikationsskelett skapat med hjälp av kommandot
yiic webapp
, så som beskrivs i Skapa en första Yii-
applikation. Kommandot yiic webapp
genererar
två filer i katalogen protected
: yiic
och yiic.bat
. De utgör den lokala
versionen av yiic
-verktyget, skapad speciellt för webbapplikationen.
Därefter kan vi skapa våra egna kommandon under katalogen protected/commands
.
När vi kör det lokala yiic
-verktyget, kommer vi att se våra egna kommandon
förutom de som är standard. Vi kan också skapa egna kommandon som skall användas
med yiic shell
. För att göra så, placera bara kommandonas klassfiler i
katalogen protected/commands/shell
.
Signup or Login in order to comment.