包 | 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)));
}