您的位置:首页 > 编程语言 > PHP开发

yii2框架-console的cli模式(二十)

2016-07-25 14:23 417 查看
又有两周的时间没有写blog了,没办法最近实在是太忙了,公司的项目一直在赶,而且还要使用nodejs去实现功能,所以整个团队的又得乖乖认真的学习nodejs。
互联网技术每天都在日新月异的快速发展,我们作为一名设计与开发人员,每天都要关注整个移动互联网的发展趋势,掌握实时动态。
好吧,回归正题,yii2作为一个高性能的web开发框架,在处理后台任务方面有什么优势?是否可以实现cli的模式实现框架本身的后台任务?
答案是可以的!
在yii2的框架中,有一个console(控制台模块)类,可以实现很多的yii2中的命令行功能。
大家可以http://www.yiichina.com/doc/guide/2.0/tutorial-console看看具体内容

下面介绍的主要是yii2的cli的模式执行后台的任务处理。
(1)console的入口文件
在base版本中,有一个yii的文件,这个文件的代码如下:
#!/usr/bin/env php
<?php
/**
* Yii console bootstrap file.
*
* @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/ */

defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/vendor/autoload.php');
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');

$config = require(__DIR__ . '/config/console.php');

$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);其实这是一个php的shell脚本(cli模式脚本),可以看到,入口文件和web应用的入口文件没有多大的区别的。

(2)配置文件
在console文件夹下有一个console.php文件,这个文件就是配置console需要应用到的组件
其中一项
'controllerNamespace' => 'app\commands',

表示console的逻辑业务(Controller)将在@app/commands的这个文件夹下面,默认一个controller
<?php
/**
* @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/ */

namespace app\commands;

use yii\console\Controller;

/**
* This command echoes the first argument that you have entered.
*
* This command is provided as an example for you to learn how to create console commands.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
*/
class HelloController extends Controller
{
/**
* This command echoes what you have entered as the message.
* @param string $message the message to be echoed.
*/
public function actionIndex($message = 'hello world')
{
echo $message . "\n";
}
}在这里我们可以实现很多的控制器的方法操作。

那么在控制台中我们可以直接调用命令执行这个对应的操作
首先进入值basic的文件夹下,然后
yii hello/index 
可以直接运行。

这个是在basic的版本上比较容易实现,那么在advanced高级版本如何实现?
在advanced中,分为common公共模块,frontend前台应用,backend后台应用,console控制台应用
(1)console的入口文件
advanced版本中需要一个console的入口文,我们可以在console文件夹下面建立一个yii文件
#!/usr/bin/env php
<?php
/**
* Yii console bootstrap file.
*
* @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/ */

defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

// 一定要包含这个文件进来,完成设置的@console的别名
require(__DIR__ . '/../common/config/bootstrap.php');

$config = require(__DIR__ . '/config/main.php');

$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);注意这个require(__DIR__ . '/../common/config/bootstrap.php');
因为boostrap文件里面是设置各个模块应用的别名的。所以在进入这个模块或者应用时,必须要设置设置对应模块的别名,否则没法识别,无法加载文件。

(2)配置文件
在console文件夹下有一个config文件夹,可以配置里面的各个文件,现在主要说一下的是main.php的主配置文件,其中一项
'controllerNamespace' => 'console\controllers',

这个要配置好,在控制器中可以使用该配置的命名空间,那么可以在console/controllers下建立controller
<?php
/**
* @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/ */

namespace console\controllers;

use yii\console\Controller;

/**
* This command echoes the first argument that you have entered.
*
* This command is provided as an example for you to learn how to create console commands.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
*/
class TestController extends Controller
{
/**
* This command echoes what you have entered as the message.
* @param string $message the message to be echoed.
*/
public function actionIndex($message = 'hello world')
{
echo $message . "\n";
}

public function actionCreate() {
echo 'advanced';
}
}
具体的业务就可以在这里实现
在终端控制台进入console的文件夹下,执行yii test/index
可以打印hello word。
通过上面的basic版本和advanced版本的,可以利用定时任务来做一些后台的业务处理。

友情推荐
本人已开源基于swoole扩展实现的轻量级框架https://github.com/bingcool/swoolefy
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  yii2 console cli