命令行运行模式


MiniFramework 从 2.13.0 版本开始支持全新的命令行运行模式,与之前的命令行兼容模式不同,全新模式针对命令行运行特点进行了许多优化。

创建启动脚本

在应用目录下创建名为 run 的启动脚本,例如:<your_path>/App/run

启动脚本的用途是预设一些必要常量,加载框架的引导程序,并通过解析命令行参数运行对应的命令行控制器。

启动脚本代码如下:

#!/usr/bin/env php
<?php
/**
 * 命令行模式启动脚本
 */

// 应用命名空间(请与应用所在目录名保持一致)
const APP_NAMESPACE = 'App';

// 应用路径
const APP_PATH = __DIR__;

// 命令行模式标识
const CONSOLE_MODE = true;

// 是否显示错误信息(命令行模式建议开启,默认值:false)
const SHOW_ERROR = true;

// 是否开启日志(命令行模式建议开启,默认值:false)
const LOG_ON = true;

// 系统目录分隔符
const DS = DIRECTORY_SEPARATOR;

// 日志存储路径(LOG_MODE为1时生效)
const LOG_PATH = APP_PATH . DS . 'Log' . DS . 'console-log';

// 引入 MiniFramework 的引导程序(路径请根据实际情况自行修改)
require dirname(__DIR__) . DS . 'MiniFramework' . DS . 'Bootstrap.php';

需要给上述脚本赋予执行权限,例如:chmod +x <your_path>/App/run

创建命令行运行模式的控制器

开发者可将命令行模式的控制器文件放置于应用目录下的 Console 目录中,例如:<your_path>/App/Console/Demo.php

代码例如:

<?php
// 命名空间需要声明为 App\Console 对应 Console 目录
namespace App\Console;

// 这里引用的是 Console 下的 Action
use Mini\Console\Action;

/**
 * 这是一个命令行运行模式的控制器
 */
class Demo extends Action
{
    function infoAction()
    {
        // 输出的内容需要开发者自己处理换行(例如:\n)
        echo "Hello World!\n";

        // 返回 0 代表程序正常结束
        return 0;
    }
}

从上边的示例可以看出,命令行运行模式的控制器代码,与常规代码编写方式上基本相同,区别就在命名空间和运行结束后退出返回方式上的不同。

运行方式

在命令行执行 <your_path>/App/run demo/info 后,如果执行成功,会输出“Hello World!”。

向命令行输出格式化的日志内容

在命令行运行模式下,开发者可以通过框架自带的方法便捷地向命令行输出被格式化后的日志内容,以便对程序运行进行监控和调试.

代码如下:

<?php
namespace App\Console;

use Mini\Console\Action;

class Demo extends Action
{
    function infoAction()
    {
        // 使用框架自带的方法向命令行输出格式化的日志
        $this->consoleLog('这是一条INFO级别的日志');

        $this->consoleLog('这也是一条INFO级别的日志', 'INFO');

        $this->consoleLog('这是一条DEBUG日志', 'DEBUG');

        return 0;
    }
}

上边的代码在命令行运行后,会看如下内容输出:

2025-09-12 20:21:47.342 - [INFO: 这是一条INFO级别的日志]
2025-09-12 20:21:47.343 - [INFO: 这也是一条INFO级别的日志]
2025-09-12 20:21:47.343 - [DEBUG: 这是一条DEBUG日志]

每调用一次 $this->consoleLog() 方法,框架会向命令行输出一行传入的日志内容。