搜索
首页后端开发php教程Yii框架官方指南系列50——专题:控制台应用



控制台应用主要用于实现在线Web应用所需要的离线操作,例如代码生成, 搜索索引编译, 邮件发送等等. Yii框架以面向对象的方式提供了一个编写控制台应用的框架. 它允许控制台应用访问在线Web应用所使用的资源 (例如数据库连接信息) .

1. 概览

Yii可以以命令行的方式运行每一个控制台任务,控制台命令是一个继承自CConsoleCommand的类。

当我们使用 yiic webapp 工具创建一个初始化的Yii应用骨架的时候, 我们可以在protected文件夹下看到如下两个文件:

  • yiic: 这是一个运行在Linux/Unix上的可执行脚本;

  • yiic.bat: 这是一个运行在Windows上的可执行批处理脚本.

在控制台窗口中, 我们可以输入如下命令:

cd protected
yiic help

这将会显示一系列的控制台命令。默认情况下,这些有效的命令包括由Yii框架提供的(系统命令)和开发者自己为独立应用编写的(用户命令)。

yiic-help

如果想要查看如何使用一个命令, 可以使用:

yiic help <command-name>

要执行一个命令, 可以使用如下的命令格式:

yiic <command-name> [parameters...]

2. 创建命令

控制台命令以类文件的形式保存形如CConsoleApplication::command的路径下. 默认情况下, 指向文件夹protected/commands.

一个控制台命令类必须继承自CConsoleCommand. 这个类名必须是XyzCommand的格式, 其中 Xyz 代表首字母大写的命令名称. 例如, 一个sitemap 命令必须使用类名 SitemapCommand。控制台命令名是大小写敏感的.

Tip: 通过配置 CConsoleApplication::command匹配, 可以获取以不同形式命名、存储在不同文件夹下的命令类.

为了创建一个新的命令,需要经常重写 CConsoleCommand::run() 或者开发一个或者多个命令动作。

当执行一个控制台命令时,CConsoleCommand::run()方法将会被控制台应用调用。所有控制台参数也会以如下方法片段的形式传入这个方法:


public function run($args) { ... }

其中 $args 代表命令行给定的额外参数。

在控制台命令中, 我们可以使用 Yii::app()来访问控制台应用实例, 不仅如此我们还可以访问资源如数据库连接 (e.g. Yii::app()->db). 可以看到这种用法和在Web应用中的使用非常类似。

Info: 从版本1.1.1开始, 我们还可以创建被同一台机子上所有的Yii应用共享的全局命令:定义一个命名为 YII_CONSOLE_COMMANDS的环境变量指向一个已存在的文件夹,然后将我们的全局命令类放到这个文件夹下即可。

3. 控制台命令动作(action)

Note: 这个控制台命令动作特性从版本1.1.5后有效。

一个控制台命令经常需要处理不同的命令行参数, 有些是必须的,有些是可选的. 控制台命令还需要提供一些子命令来处理不同的子任务。这些工作可以简化使用控制台命令动作。

一个控制台命令动作是一个控制台命令类中的方法. 这个方法名必须是actionXyz的格式, 其中Xyz 代表首字母大写的动作名. 例如, 一个actionIndex方法定义了一个命名为index的动作.

想要执行特定的动作, 我们可以使用如下的命令行格式:

yiic <command-name> <action-name> --option1=value1 --option2=value2 ...

额外的 option-value 对将为以命名参数的方式传入动作方法中. 一个xyz 操作的值将会以$xyz参数的形式传入到动作方法中。例如, 如果我们定义了如下的命令类:


class SitemapCommand extends CConsoleCommand
{
    public function actionIndex($type, $limit=5) { ... }
    public function actionInit() { ... }
}

然后,下面的控制台命令在调用actionIndex('News', 5)的时候都会有结果:

yiic sitemap index --type=News --limit=5

// $limit takes default value
yiic sitemap index --type=News

// $limit takes default value
// because 'index' is a default action, we can omit the action name
yiic sitemap --type=News

// the order of options does not matter
yiic sitemap index --limit=5 --type=News

如果一个操作没有指定值(e.g. --type instead of --type=News), 相应的动作参数值将会假定为true。

Note: 不支持可选的参数格式 --type News, -t News.

一个参数值可以是数组(必须要有数组类型提示):


public function actionIndex(array $types) { ... }

在命令行参数中想要使用数组值, 只需简单重复同一个选项:

yiic sitemap index --types=News --types=Article

上面的命令最终将会调用actionIndex(array('News', 'Article')).

从版本 1.1.6开始, Yii 还支持使用匿名动作参数和全局选项.

匿名参数表示这些命令行参数不是以选项的形式呈现. 例如, 在命令 yiic sitemap index --limit=5 News中, 我们有一个值为News的匿名参数和命名参数 limit,其值为5。

为了使用匿名参数, 一个命令动作必须声明参数为 $args的形式. 例如,


public function actionIndex($limit=10, $args=array()) {...}

$args数组将会装入所有的匿名参数值.

全局选项代表那些命令行选项可以被一个命令中所有动作共享的选项. 例如, 在一个命令中提供了多个选项, 我们可能想要每一个动作识别一个名为verbose的动作. 当然我们可以在每一个动作方法中声明 $verbose 参数, 一个更好的方式是将其声明为这个命令类的公有成员变量, 将 verbose 转换为全局参数:


class SitemapCommand extends CConsoleCommand
{
    public $verbose=false;
    public function actionIndex($type) {...}
}

上面的代码允许我们执行一个带 verbose 选项的命令:

yiic sitemap index --verbose=1 --type=News

4. 退出代码

Note: 在控制台命令中退出代码的特性从版本 1.1.11起有效.

通过cronjob或者使用一个持续集成的服务器自动运行控制台命令的时候, 要么命令运行运行成功,要么命令运行失败. 这可以通过检查进程返回的退出代码来查看。

这些退出码是从0-254的整型值(this is the range in php world), 其中 0 表示退出成功其他的所有非0值表示出现了错误.

在一个动作方法或者控制台命令的 run() 方法中你可以在退出时返回整型值退出码 ,例如:


if (/* error */) {
    return 1; // exit with error code 1
}
// ... do something ...
return 0; // exit successfully

如果没有返回值, 应用将会退出返回 0.

5. 自定义控制台应用

默认情况下, 如果一个应用是使用yiic webapp工具创建的, 命令行应用的配置将会放在 protected/config/console.php文件中. 和一个Web应用配置文件一样, 这个文件是一个返回控制台应用实例的初始化配置值的数组的PHP脚本。所以CConsoleApplication的任何公有属性都可以在该文件中配置.

因为控制台命令经常被创建来服务于Web应用, 所以需要访问资源(如数据库连接)。我们可以在控制台配置文件中以如下方式来实现 :


return array(
    ......
    'components'=>array(
        'db'=>array(
            ......
        ),
    ),
);

正如我们所看到的那样, 配置的格式和我们在Web应用中的配置类似.这是因为CConsoleApplication和 CWebApplication 的基类相同。

 以上就是Yii框架官方指南系列50——专题:控制台应用的内容,更多相关内容请关注PHP中文网(www.php.cn)!


声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
使用Yii框架创建电影网站使用Yii框架创建电影网站Jun 21, 2023 am 09:04 AM

随着互联网的普及以及人们对电影的热爱,电影网站成为了一个受欢迎的网站类型。在创建一个电影网站时,一个好的框架是非常必要的。Yii框架是一个高性能的PHP框架,易于使用且具有出色的性能。在本文中,我们将探讨如何使用Yii框架创建一个电影网站。安装Yii框架在使用Yii框架之前,需要先安装框架。安装Yii框架非常简单,只需要在终端执行以下命令:composer

Yii框架简介:了解Yii的核心概念Yii框架简介:了解Yii的核心概念Jun 21, 2023 am 09:39 AM

Yii框架是一个高性能、高扩展性、高可维护性的PHP开发框架,在开发Web应用程序时具有很高的效率和可靠性。Yii框架的主要优点在于其独特的特性和开发方法,同时还集成了许多实用的工具和功能。Yii框架的核心概念MVC模式Yii采用了MVC(Model-View-Controller)模式,是一种将应用程序分为三个独立部分的模式,即业务逻辑处理模型、用户界面呈

为什么Yii框架比其他框架更好用?为什么Yii框架比其他框架更好用?Jun 21, 2023 am 10:30 AM

Yii框架是一个高性能、可扩展、安全的PHP框架。它是一个优秀的开发工具,能够让开发者快速高效地构建复杂的Web应用程序。以下是几个原因,让Yii框架比其他框架更好用。高性能Yii框架使用了一些先进的技术,例如,延迟加载(lazyloading)和自动加载机制(automaticclassloading),这使得Yii框架的性能高于许多其他框架。它还提

Yii框架中的ViewState:实现数据保护Yii框架中的ViewState:实现数据保护Jun 21, 2023 am 09:02 AM

ViewState是ASP.NET中的一种机制,用于保护页面的隐私数据。而在Yii框架中,ViewState同样也是实现页面数据保护的重要手段。在Web开发中,随着用户界面操作的复杂度增加,前端与后端之间的数据传输也愈发频繁。但是,不可避免的会有恶意用户通过网络抓包等手段截获数据。而未加保护的数据可能含有用户隐私、订单信息、财务数据等重要资料。因此,加密传输

Yii框架中的队列:高效地处理异步操作Yii框架中的队列:高效地处理异步操作Jun 21, 2023 am 10:13 AM

随着互联网的快速发展,应用程序对于处理大量并发请求和任务变得越来越重要。在这样的情况下,处理异步任务是必不可少的,因为这可以使应用程序更加高效,并更好地响应用户请求。Yii框架提供了一个方便的队列组件,使得处理异步操作更加容易和高效。在本篇文章中,我们将探讨Yii框架中队列的使用和优势。什么是队列队列是一种数据结构,用于处理数据的先进先出(FIFO)顺序。队

Yii框架中的分页机制:优化数据展示效果Yii框架中的分页机制:优化数据展示效果Jun 21, 2023 am 08:43 AM

在现今互联网时代,数据的处理和展示对于各种应用而言都是至关重要的。对于一些数据量较大的网站,其展示效果直接影响用户体验,而优秀的分页机制可以使得数据展示更加清晰,提高用户的使用体验。在本文中,我们将介绍Yii框架中的分页机制,并探讨如何通过优化分页机制来改进数据展示效果。Yii框架是一种基于PHP语言的高性能、适用于Web应用的开发框架。它提供

Yii框架中的扩展:使用外部库Yii框架中的扩展:使用外部库Jun 21, 2023 am 10:11 AM

Yii是一款优秀的PHP框架,它提供了很多丰富的功能和组件来加快Web应用程序的开发。其中一个非常重要的特性就是可以方便地使用外部库进行扩展。Yii框架中的扩展可以帮助我们快速完成许多常见的任务,例如操作数据库、缓存数据、发送邮件、验证表单等等。但是有时候,我们需要使用一些其他的PHP类库来完成特定的任务,例如调用第三方API、处理图片、生成PDF文件等等。

Yii框架中的身份认证与授权:保障应用程序的安全性Yii框架中的身份认证与授权:保障应用程序的安全性Jun 21, 2023 am 09:57 AM

在Web应用程序开发领域,身份认证和授权是保障应用程序安全性必不可少的两个环节,而Yii框架提供了完善的身份认证和授权机制,帮助开发者轻松实现这些功能,保障应用程序的安全性。一、身份认证1.1基础认证Yii框架中的基础认证机制采用HTTPBasic认证的方式实现。当用户在浏览器中访问需要认证的页面时,服务器会发送一个401Unauthorized响应,

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具