后台处理数据
1.前言
前面小节介绍了如何使用 ThinkPHP 命令行快速生成指定功能的文件,本小节主要介绍如何使用 ThinkPHP 提供的自定义命令行,以后台处理数据为例来介绍自定义命令行的用法。
2.生成自定义命令处理文件
可以使用如下的命令生成一个自定义命令行处理文件:
php think make:command Study test
如下图所示:

Tips: 若
php没有加入环境变量,可以使用绝对路径,如E:\php\php7.3.4nts\php think version。
生成的自定义命令行文件内容如下:
<?php
declare (strict_types = 1);
namespace app\command;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
class Study extends Command
{
    protected function configure()
    {
        // 指令配置
        $this->setName('test')
            ->setDescription('the test command');
    }
    protected function execute(Input $input, Output $output)
    {
        // 指令输出
        $output->writeln('test');
    }
}
3.配置文件加入自定义命令
打开 config\console.php 文件,加入如下内容:
<?php
// +----------------------------------------------------------------------
// | 控制台配置
// +----------------------------------------------------------------------
return [
    // 指令定义
    'commands' => [
        'test' => 'app\command\Study'
    ],
];
如下图所示:

4.测试自定义命令
输入如下命令可以执行上述自定义命令:
php think test
如下图所示:

5.后台处理新增数据
在上述的 execute 方法中,可以实例化一个模型类,然后循环插入数据来模拟自定义命令行来处理新增数据:
    protected function execute(Input $input, Output $output)
    {
        // 指令输出
        $names = ["赵雷","孙空","钱学","王五","张红","李亮"];
        for ($i = 0;$i < 200000;$i++){
            $student = new StudentModel();
            $student->name = $names[mt_rand(0,5)];
            $student->age = mt_rand(18,25);
            $student->id_number = "42011720040506".mt_rand(1000,9999);
            $student->created_at = time();
            $student->save();
        }
        $output->writeln('执行完成');
    }
如下图所示:

Tips: 上图内容表示使用命令向学生表插入
20万条随机学生数据。
再次执行 php think test 命令之后会消耗比较长的时间,耐心等待之后数据库数据如下图所示:

Tips: 可以看到使用命令行后台处理数据是不会超时停止的,这是由于使用的是 php 的
CLI模式。
6.在控制器中使用自定义命令
这里为了演示方便,直接在 app\controller\Index 的 index 方法中,加入调用自定义命令的方法:
<?php
namespace app\controller;
use app\BaseController;
use think\facade\Console;
class Index extends BaseController
{
    public function index()
    {
        $output = Console::call('test');
        return $output->fetch();
    }
}
如下图所示:

7.小结
本小节主要介绍了如何生成自定义命令行文件,然后配置自定义命令行,定义好自定义命令行文件之后,就可以在该文件中处理业务逻辑了,若想用 php 守护进程后台处理数据,则可以在命令行类中使用 while(1) 在后台不断的跑,例如使用 php 处理消息队列订阅的消息时可以采用这种办法简单的处理。
Tips: 代码仓库:https://gitee.com/love-for-poetry/tp6
          本文来自互联网用户投稿,不拥有所有权,该文观点仅代表作者本人,不代表本站立场。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。
