> YII 类库手册 > CConsoleApplication
system.console
继承 class CConsoleApplication » CApplication » CModule » CComponent
源自 1.0
版本 $Id: CConsoleApplication.php 3426 2011-10-25 00:01:09Z alexander.makarow $
源码
CConsoleApplication代表一个控制台应用程序。

CConsoleApplication继承于CApplication,提供了一些功能来处理控制台请求。 一般来说,它通过基于命令的方法处理 那些那些控制台请求:
  • 一个控制台应用包含着一个或者多个可能的用户命令;
  • 每条用户命令都是以类的形式实现的,继承于CConsoleCommand;
  • 用户指定哪些命令会运行在命令行;
  • 命令程序根据指定的参数处理用户请求。


命令类是放在目录commandPath下面。 这些类的命名规则是:<command-name>Command,文件名字跟类的名字一样。 例如,‘shellCommand’类定义了 一个‘shell’命令, 它的文件名字为’ShellCommand.php‘。

输入以下命令行来运行终端应用:
php path/to/entry_script.php <command name> [param 1] [param 2] ...


你可以使用下面命令来查看帮助介绍:
php path/to/entry_script.php help <command name>

公共属性

属性 类型 描述 定义在
basePath string 返回应用程序的根目录。 CApplication
baseUrl string 返回应用程序的相对URL。 CApplication
behaviors array the behaviors that should be attached to the module. CModule
cache CCache 返回缓存组件。 CApplication
charset string 应用程序当前使用的字符集。默认为‘UTF-8’。 CApplication
commandMap array 命令名字对应到命令配置。 每一个命令配置可以是字符串,或者是一个数组。 如果是前者,这个字符串应该是命令类的路径。 如果是后者,这个数组一定要包含‘class’元素 (指定 命令的类名或者是YiiBase::getPathOfAlias类的路径别名) 其余的在数组中的键名-键值对会被用来 初始化相关的命令属性。例如,
array(
  'email'=>array(
     'class'=>'path.
CConsoleApplication
commandPath string 包含命令类的目录。默认是‘protected/commands’。 CConsoleApplication
commandRunner CConsoleCommandRunner 返回命令执行对象。 CConsoleApplication
components array 返回应用组件。 CModule
controller CController 当前活动控制器。为Null返回它的基类。 CApplication
coreMessages CPhpMessageSource 返回核心信息翻译组件。 CApplication
dateFormatter CDateFormatter 返回本地化的日期格式。 CApplication
db CDbConnection 返回数据库连接组件。 CApplication
errorHandler CErrorHandler 返回错误处理组件。 CApplication
extensionPath string 返回第三方扩展根目录。 CApplication
homeUrl string 主页URL CApplication
id string 返回应用程序的唯一标识符。 CApplication
language string 返回用户正在使用的应用程序语言。 CApplication
locale CLocale 返回本地(环境)实例。 CApplication
localeDataPath string 返回包含本地化的数据目录。 CApplication
messages CMessageSource 返回应用程序信息翻译组件。 CApplication
modulePath string 返回包含应用程序模块的目录。 CModule
modules array 返回应用程序当前已经安装的模块。 CModule
name string 应用程序名字。默认为‘My Application’。 CApplication
numberFormatter CNumberFormatter 本地化数字格式。 将使用当前application locale。 CApplication
params CAttributeCollection 返回用户定义的参数。 CModule
parentModule CModule 返回父模块。 CModule
preload array the IDs of the application components that should be preloaded. CModule
request CHttpRequest 返回请求组件。 CApplication
runtimePath string 返回存储运行时文件目录。 CApplication
securityManager CSecurityManager 返回安全管理器组件。 CApplication
sourceLanguage string 应用程序使用语言. CApplication
statePersister CStatePersister 返回持久状态组件。 CApplication
timeZone string 返回应用程序所使用的时区。 CApplication
urlManager curlManager 返回URL管理器组件。 CApplication

公共方法

方法 描述 定义在
__call() 如果类中没有调的方法名,则调用这个方法。 CComponent
__construct() 构造器。 CApplication
__get() getter魔术方法。 CModule
__isset() 检查一个属性值是否为null。 CModule
__set() 设置一个组件的属性值。 CComponent
__unset() 设置一个组件的属性为null。 CComponent
asa() 返回这个名字的行为对象。 CComponent
attachBehavior() 附加一个行为到组件。 CComponent
attachBehaviors() 附加一个行为列表到组件。 CComponent
attachEventHandler() 为事件附加一个事件处理程序。 CComponent
canGetProperty() 确定属性是否可读。 CComponent
canSetProperty() 确定属性是否可写。 CComponent
clearGlobalState() 清空一个全局值。 CApplication
configure() 为模块指定配置。 CModule
createAbsoluteUrl() 创建一个基于给定控制器和动作(信息)绝对的URL。 CApplication
createUrl() 创建一个基于给定控制器和动作(信息)相对的URL。 CApplication
detachBehavior() 从组件中分离一个行为。 CComponent
detachBehaviors() 从组件中分离所有行为。 CComponent
detachEventHandler() 分离一个存在的事件处理程序。 CComponent
disableBehavior() 禁用一个附加行为。 CComponent
disableBehaviors() 禁用组件附加的所有行为。 CComponent
displayError() 显示捕捉到的 PHP 错误。 CConsoleApplication
displayException() 显示没有捕获到的异常。 CConsoleApplication
enableBehavior() 启用一个附加行为。 CComponent
enableBehaviors() 启用组件附加的所有行为。 CComponent
end() 终止应用程序。 CApplication
evaLuateExpression() 计算一个PHP表达式,或根据组件上下文执行回调。 CComponent
findLocalizedFile() 返回指定文件的本地化版本。 CApplication
getBasePath() 返回应用程序的根目录。 CApplication
getBaseUrl() 返回应用程序的相对URL。 CApplication
getCache() 返回缓存组件。 CApplication
getCommandPath() 返回包含命令类的目录。默认是‘protected/commands’。 CConsoleApplication
getCommandRunner() 返回命令执行对象。 CConsoleApplication
getComponent() Retrieves the named application component. CModule
getComponents() 返回应用组件。 CModule
getController() 返回当前活动控制器。为Null返回它的基类。 CApplication
getCoreMessages() 返回核心信息翻译组件。 CApplication
getDateFormatter() 返回本地化的日期格式。 CApplication
getDb() 返回数据库连接组件。 CApplication
getErrorHandler() 返回错误处理组件。 CApplication
getEventHandlers() 返回一个事件的附加处理程序列表。 CComponent
getExtensionPath() 返回第三方扩展根目录。 CApplication
getGlobalState() 返回一个全局值 CApplication
getHomeUrl() 返回主页URL CApplication
getId() 返回应用程序的唯一标识符。 CApplication
getLanguage() 返回用户正在使用的应用程序语言。 CApplication
getLocale() 返回本地(环境)实例。 CApplication
getLocaleDataPath() 返回包含本地化的数据目录。 CApplication
getMessages() 返回应用程序信息翻译组件。 CApplication
getModule() 检索指定的应用模块。 CModule
getModulePath() 返回包含应用程序模块的目录。 CModule
getModules() 返回应用程序当前已经安装的模块。 CModule
getNumberFormatter() 返回本地化数字格式。 将使用当前application locale。 CApplication
getParams() 返回用户定义的参数。 CModule
getParentModule() 返回父模块。 CModule
getRequest() 返回请求组件。 CApplication
getRuntimePath() 返回存储运行时文件目录。 CApplication
getSecurityManager() 返回安全管理器组件。 CApplication
getStatePersister() 返回持久状态组件。 CApplication
getTimeZone() 返回应用程序所使用的时区。 CApplication
getUrlManager() 返回URL管理器组件。 CApplication
handleError() 处理PHP异常错误,如警告,通知。 CApplication
handleException() 处理未捕获的PHP异常。 CApplication
hasComponent() 检查是否存在指定组件。 CModule
hasEvent() 确定一个事件是否定义。 CComponent
hasEventHandler() 检查事件是否有附加的处理程序。 CComponent
hasModule() 检查是否已经安装了指定模块。 CModule
hasProperty() 确定属性是否被定义。 CComponent
loadGlobalState() 从持久存储加载全局状态数据。 CApplication
onBeginRequest() 应用程序处理请求之前发起。 CApplication
onEndRequest() 应用程序处理请求之后发起。 CApplication
onError() 当一个PHP异常错误发生时发起。 CApplication
onException() 当一个未捕获的PHP异常发生时发起。 CApplication
processRequest() 处理用户请求。 CConsoleApplication
raiseEvent() 发起一个事件。 CComponent
run() 运行应用程序。 CApplication
saveGlobalState() 保存全局状态数据到持久存储。 CApplication
setAliases() 定义根目录的别名。 CModule
setBasePath() 设置应用程序根目录。 CApplication
setCommandPath() 设置包含命令类的目录。 CConsoleApplication
setComponent() 添加一个组件到模块中 CModule
setComponents() 设置应用组件。 CModule
setExtensionPath() 设置第三方扩展目录。 CApplication
setGlobalState() 设置一个全局值。 CApplication
setHomeUrl() 设置设置主页URL CApplication
setId() 设置应用程序唯一的标识符。 CApplication
setImport() 设置在模块中使用的路径别名。 CModule
setLanguage() 指定应用程序语言。 CApplication
setLocaleDataPath() 设置包含本地化数据的目录。 CApplication
setModulePath() 设置包含应用程序模块的目录。 CModule
setModules() 配置模块的子模块。 CModule
setParams() 设置用户定义的参数。 CModule
setRuntimePath() 设置存储运行时文件目录。 CApplication
setTimeZone() 设置应用程序所使用的时区。 CApplication

受保护方法

方法 描述 定义在
createCommandRunner() 创建命令执行对象实例。 CConsoleApplication
init() 通过创建命令执行对象初始化这个应用。 CConsoleApplication
initSystemHandlers() 初始化类自动加载器和错误处理。 CApplication
preinit() 模块预初始化。 CModule
preloadComponents() 加载静态应用组件。 CModule
registerCoreComponents() 注册核心应用组件。 CApplication

事件

事件 描述 定义在
onBeginRequest 应用程序处理请求之前发起。 CApplication
onEndRequest 应用程序处理请求之后发起。 CApplication
onException 当一个未捕获的PHP异常发生时发起。 CApplication
onError 当一个PHP异常错误发生时发起。 CApplication

属性详细

commandMap 属性
public array $commandMap;

命令名字对应到命令配置。 每一个命令配置可以是字符串,或者是一个数组。 如果是前者,这个字符串应该是命令类的路径。 如果是后者,这个数组一定要包含‘class’元素 (指定 命令的类名或者是YiiBase::getPathOfAlias类的路径别名) 其余的在数组中的键名-键值对会被用来 初始化相关的命令属性。例如,

array(
  'email'=>array(
     'class'=>'path.to.Mailer',
     'interval'=>3600,
  ),
  'log'=>'path/to/LoggerCommand.php',
)
commandPath 属性
public string getCommandPath()
public void setCommandPath(string $value)

包含命令类的目录。默认是‘protected/commands’。

commandRunner 属性 只读
public CConsoleCommandRunner getCommandRunner()

返回命令执行对象。

方法详细

createCommandRunner() 方法
protected CConsoleCommandRunner createCommandRunner()
{return} CConsoleCommandRunner 命令执行对象
protected function createCommandRunner()
{
    return new 
CConsoleCommandRunner;
}

创建命令执行对象实例。

displayError() 方法
public void displayError(integer $code, string $message, string $file, string $line)
$code integer 错误代码
$message string 错误信息
$file string 错误文件
$line string 错误的行
public function displayError($code,$message,$file,$line)
{
    echo 
"PHP Error[$code]: $message\n";
    echo 
"    in file $file at line $line\n";
    
$trace=debug_backtrace();
    
// skip the first 4 stacks as they do not tell the error position
    
if(count($trace)>4)
        
$trace=array_slice($trace,4);
    foreach(
$trace as $i=>$t)
    {
        if(!isset(
$t['file']))
            
$t['file']='unknown';
        if(!isset(
$t['line']))
            
$t['line']=0;
        if(!isset(
$t['function']))
            
$t['function']='unknown';
        echo 
"#$i {$t['file']}({$t['line']}): ";
        if(isset(
$t['object']) && is_object($t['object']))
            echo 
get_class($t['object']).'->';
        echo 
"{$t['function']}()\n";
    }
}

显示捕捉到的 PHP 错误。 当没有处于活动的错误处理类的时候, 这个方法会在终端模式下显示错误。

displayException() 方法
public void displayException(Exception $exception)
$exception Exception 没有捕捉的异常
public function displayException($exception)
{
    echo 
$exception;
}

显示没有捕获到的异常。 当没有处于活动的错误处理类的时候, 这个方法会在终端模式下显示错误。

getCommandPath() 方法
public string getCommandPath()
{return} string 包含命令类的目录。默认是‘protected/commands’。
public function getCommandPath()
{
    
$applicationCommandPath $this->getBasePath().DIRECTORY_SEPARATOR.'commands';
    if(
$this->_commandPath===null && file_exists($applicationCommandPath))
        
$this->setCommandPath($applicationCommandPath);
    return 
$this->_commandPath;
}

getCommandRunner() 方法
public CConsoleCommandRunner getCommandRunner()
{return} CConsoleCommandRunner 命令执行对象。
public function getCommandRunner()
{
    return 
$this->_runner;
}

返回命令执行对象。

init() 方法
protected void init()
protected function init()
{
    
parent::init();
    if(!isset(
$_SERVER['argv'])) // || strncasecmp(php_sapi_name(),'cli',3))
        
die('This script must be run from the command line.');
    
$this->_runner=$this->createCommandRunner();
    
$this->_runner->commands=$this->commandMap;
    
$this->_runner->addCommands($this->getCommandPath());
}

通过创建命令执行对象初始化这个应用。

processRequest() 方法
public void processRequest()
public function processRequest()
{
    
$this->_runner->run($_SERVER['argv']);
}

处理用户请求。 这个方法创建一个终端命令执行对象来处理一般的用户命令。

setCommandPath() 方法
public void setCommandPath(string $value)
$value string 包含命令类的目录。
public function setCommandPath($value)
{
    if((
$this->_commandPath=realpath($value))===false || !is_dir($this->_commandPath))
        throw new 
CException(Yii::t('yii','The command path "{path}" is not a valid directory.',
            array(
'{path}'=>$value)));
}

下一篇: