0 follower

CConsoleCommandRunner

Package system.console
Inheritance class CConsoleCommandRunner » CComponent
Since 1.0
Version $Id$
Source Code framework/console/CConsoleCommandRunner.php
CConsoleCommandRunner manages commands and executes the requested command.

Public Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
commands array list of all available commands (command name=>command configuration). CConsoleCommandRunner
scriptName string the entry script name CConsoleCommandRunner

Public Methods

Hide inherited methods

MethodDescriptionDefined By
__call() Calls the named method which is not a class method. CComponent
__get() Returns a property value, an event handler list or a behavior based on its name. CComponent
__isset() Checks if a property value is null. CComponent
__set() Sets value of a component property. CComponent
__unset() Sets a component property to be null. CComponent
addCommands() Adds commands from the specified command path. CConsoleCommandRunner
asa() Returns the named behavior object. CComponent
attachBehavior() Attaches a behavior to this component. CComponent
attachBehaviors() Attaches a list of behaviors to the component. CComponent
attachEventHandler() Attaches an event handler to an event. CComponent
canGetProperty() Determines whether a property can be read. CComponent
canSetProperty() Determines whether a property can be set. CComponent
createCommand() CConsoleCommandRunner
detachBehavior() Detaches a behavior from the component. CComponent
detachBehaviors() Detaches all behaviors from the component. CComponent
detachEventHandler() Detaches an existing event handler. CComponent
disableBehavior() Disables an attached behavior. CComponent
disableBehaviors() Disables all behaviors attached to this component. CComponent
enableBehavior() Enables an attached behavior. CComponent
enableBehaviors() Enables all behaviors attached to this component. CComponent
findCommands() Searches for commands under the specified directory. CConsoleCommandRunner
getEventHandlers() Returns the list of attached event handlers for an event. CComponent
getScriptName() Returns the entry script name CConsoleCommandRunner
hasEvent() Determines whether an event is defined. CComponent
hasEventHandler() Checks whether the named event has attached handlers. CComponent
hasProperty() Determines whether a property is defined. CComponent
raiseEvent() Raises an event. CComponent
run() Executes the requested command. CConsoleCommandRunner

Property Details

commands property
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',
)
scriptName property read-only
public string getScriptName()

the entry script name

Method Details

addCommands() method
public void addCommands(string $path)
$path string the alias of the directory containing the command class files.
Source Code: framework/console/CConsoleCommandRunner.php#98 (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() method
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#114 (show)
public function createCommand($name)
{
    
$name=strtolower($name);
    if(isset(
$this->commands[$name]))
    {
        if(
is_string($this->commands[$name]))  // class file path or alias
        
{
            if(
strpos($this->commands[$name],'/')!==false || strpos($this->commands[$name],'\\')!==false)
            {
                
$className=substr(basename($this->commands[$name]),0,-4);
                if(!
class_exists($className,false))
                    require_once(
$this->commands[$name]);
            }
            else 
// an alias
                
$className=Yii::import($this->commands[$name]);
            return new 
$className($name,$this);
        }
        else 
// an array configuration
            
return Yii::createComponent($this->commands[$name],$name,$this);
    }
    else if(
$name==='help')
        return new 
CHelpCommand('help',$this);
    else
        return 
null;
}

findCommands() method
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#78 (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.

getScriptName() method
public string getScriptName()
{return} string the entry script name
Source Code: framework/console/CConsoleCommandRunner.php#68 (show)
public function getScriptName()
{
    return 
$this->_scriptName;
}

run() method
public void run(array $args)
$args array list of user supplied parameters (including the entry script name and the command name).
Source Code: framework/console/CConsoleCommandRunner.php#48 (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';

    if((
$command=$this->createCommand($name))===null)
        
$command=$this->createCommand('help');
    
$command->run($args);
}

Executes the requested command.