入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

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

创建时间:2016-07-25 投稿人: 浏览次数:148
又有两周的时间没有写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 yiiconsoleApplication($config);
$exitCode = $application->run();
exit($exitCode);
其实这是一个php的shell脚本(cli模式脚本),可以看到,入口文件和web应用的入口文件没有多大的区别的。

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

表示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 appcommands;

use yiiconsoleController;

/**
 * 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 . "
";
    }
}
在这里我们可以实现很多的控制器的方法操作。

那么在控制台中我们可以直接调用命令执行这个对应的操作
首先进入值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 yiiconsoleApplication($config);
$exitCode = $application->run();
exit($exitCode);
注意这个require(__DIR__ . "/../common/config/bootstrap.php");
因为boostrap文件里面是设置各个模块应用的别名的。所以在进入这个模块或者应用时,必须要设置设置对应模块的别名,否则没法识别,无法加载文件。

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

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

namespace consolecontrollers;

use yiiconsoleController;

/**
 * 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 . "
";
    }

    public function actionCreate() {
    	echo "advanced";
    }
}
具体的业务就可以在这里实现
在终端控制台进入console的文件夹下,执行yii test/index
可以打印hello word。

通过上面的basic版本和advanced版本的,可以利用定时任务来做一些后台的业务处理。

友情推荐

本人已开源基于swoole扩展实现的轻量级框架

https://github.com/bingcool/swoolefy





声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。