为啥要编写命令行程序?
命令行程序通常是一个脚本,但是PHP Yii 是web开发语言,如何能开发脚本程序?
所以,首先我们要明白使用PHP Yii 编写脚本语言的目的和原理。
- 目的
设想这么一个场景,你开发了一个电子商务网站,在测试阶段,你希望模拟用户的下单操作。或者你开发了一个类股票网站,在测试阶段,你需要模拟用户的委托买入、卖出操作,并撮合用户的买入和卖出。毕竟,如果想模拟大量用户的操作,而通过手动在数据库中添加测试数据,这工作量有点大。
所以,编写Yii 脚本的目的是,通过运行脚本,自动生成用户的下单操作。这个类似于一个服务器端的程序,可以用JAVA写,但是我们是PHP程序员啊,当然用PHP实现了。
- 原理和流程
(1)编写一个Command类,类名和文件名以Command为后缀,同时继承父类CConsoleCommand,文件存放在工程下的protected/commands/目录下,例如:
<span style="font-family:Tahoma;font-size:12px;">class TestCommand extends CConsoleCommand</span>
(2)编写Command类的动作,类似控制器的动作,动作名需要以action为前缀,例如:
<span style="font-family:Tahoma;font-size:12px;">public function actionTest(){
echo "command test successfully.";
}</span>
echo的内容会打印在Windows DOS或Linux的命令行程序页面上。完整的命令类如下:
<span style="font-family:Tahoma;font-size:12px;"><?php
class FarmProduceMatchCommand extends CConsoleCommand
{
/**
* Execute the action.
* @param array command line parameters specific for this command
*/</span>
<span style="font-family:Tahoma;font-size:12px;">/*
public function run($args)
{
if(!isset($args[0]))
$this->usageError('please input params.');
echo('you input :\n');
var_dump($args);
}
*/
public function actionTest(){
echo "command test successfully.";
}
}</span>
(3)如何运行自定义的Command类和动作呢,很简单,不需要配置PHP和Yii的环境和变量。打开Dos(windows系统)或Terminal(Linux系统),在命令行,将目录定位到你的yii工程的protected目录,该目录下有yiic命令程序。比如,我的工程目录在“C:\xampp\htdocs\syjjq2”,“syjjq2”就是我的yii工程。在命令行将目录定位到syjjq2工程下的protected目录,工程目录结构如下: