| 包 | system.console |
|---|---|
| 继承 | class CConsoleApplication » CApplication » CModule » CComponent |
| 源自 | 1.0 |
| 版本 | $Id: CConsoleApplication.php 3426 2011-10-25 00:01:09Z alexander.makarow $ |
| 源码 |
CConsoleApplication代表一个控制台应用程序。
CConsoleApplication继承于CApplication,提供了一些功能来处理控制台请求。 一般来说,它通过基于命令的方法处理 那些那些控制台请求:
命令类是放在目录commandPath下面。 这些类的命名规则是:<command-name>Command,文件名字跟类的名字一样。 例如,‘shellCommand’类定义了 一个‘shell’命令, 它的文件名字为’ShellCommand.php‘。
输入以下命令行来运行终端应用:
你可以使用下面命令来查看帮助介绍:
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)
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)));
}