CConsoleCommandRunner
CConsoleCommandRunner manages commands and executes the requested command.
Public Properties
Property |
Type |
Description |
Defined By |
command | CConsoleCommand|null | Returns the currently running command. | CConsoleCommandRunner |
commands | array | list of all available commands (command name=>command configuration). | CConsoleCommandRunner |
scriptName | string | the entry script name | CConsoleCommandRunner |
Property Details
command
public CConsoleCommand|null getCommand()
public void setCommand(CConsoleCommand $value)
Returns the currently running command.
commands
public array $commands;
list of all available commands (command name=>command configuration). Each command configuration can be either a string or an array. If the former, the string should be the class name or class path alias of the command. If the latter, the array must contain a 'class' element which specifies the command's class name or class path alias. The rest name-value pairs in the array are used to initialize the corresponding command properties. For example,
array(
'email'=>array(
'class'=>'path.to.Mailer',
'interval'=>3600,
),
'log'=>'path.to.LoggerCommand',
)
public string getScriptName()
the entry script name
Method Details
addCommands()
public void addCommands(string $path) |
$path | string | the alias of the directory containing the command class files. |
Source Code: framework/console/CConsoleCommandRunner.php#128 (
show)
public function addCommands($path)
{
if(($commands=$this->findCommands($path))!==array())
{
foreach($commands as $name=>$file)
{
if(!isset($this->commands[$name]))
$this->commands[$name]=$file;
}
}
}
Adds commands from the specified command path. If a command already exists, the new one will be ignored.
createCommand()
public CConsoleCommand createCommand(string $name) |
$name | string | command name (case-insensitive) |
{return} | CConsoleCommand | the command object. Null if the name is invalid. |
Source Code: framework/console/CConsoleCommandRunner.php#144 (
show)
public function createCommand($name)
{
$name=strtolower($name);
$command=null;
if(isset($this->commands[$name]))
$command=$this->commands[$name];
else
{
$commands=array_change_key_case($this->commands);
if(isset($commands[$name]))
$command=$commands[$name];
}
if($command!==null)
{
if(is_string($command)) // class file path or alias
{
if(strpos($command,'/')!==false || strpos($command,'\\')!==false)
{
$className=substr(basename($command),0,-4);
if(!class_exists($className,false))
require_once($command);
}
else // an alias
$className=Yii::import($command);
return new $className($name,$this);
}
else // an array configuration
return Yii::createComponent($command,$name,$this);
}
elseif($name==='help')
return new CHelpCommand('help',$this);
else
return null;
}
findCommands()
public array findCommands(string $path) |
$path | string | the directory containing the command class files. |
{return} | array | list of commands (command name=>command class file) |
Source Code: framework/console/CConsoleCommandRunner.php#108 (
show)
public function findCommands($path)
{
if(($dir=@opendir($path))===false)
return array();
$commands=array();
while(($name=readdir($dir))!==false)
{
$file=$path.DIRECTORY_SEPARATOR.$name;
if(!strcasecmp(substr($name,-11),'Command.php') && is_file($file))
$commands[strtolower(substr($name,0,-11))]=$file;
}
closedir($dir);
return $commands;
}
Searches for commands under the specified directory.
getCommand()
public CConsoleCommand|null getCommand() |
{return} | CConsoleCommand|null | the currently active command. |
Returns the currently running command.
public string getScriptName() |
{return} | string | the entry script name |
public integer|null run(array $args) |
$args | array | list of user supplied parameters (including the entry script name and the command name). |
{return} | integer|null | application exit code returned by the command. if null is returned, application will not exit explicitly. See also CConsoleApplication::processRequest(). (return value is available since version 1.1.11) |
Source Code: framework/console/CConsoleCommandRunner.php#54 (
show)
public function run($args)
{
$this->_scriptName=$args[0];
array_shift($args);
if(isset($args[0]))
{
$name=$args[0];
array_shift($args);
}
else
$name='help';
$oldCommand=$this->_command;
if(($command=$this->createCommand($name))===null)
$command=$this->createCommand('help');
$this->_command=$command;
$command->init();
$exitCode=$command->run($args);
$this->_command=$oldCommand;
return $exitCode;
}
Executes the requested command.
setCommand()