包 | 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 |
公共方法
受保护方法
方法 | 描述 | 定义在 |
---|---|---|
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
属性
包含命令类的目录。默认是‘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)));
}