自己动手开发命令行工具

优质
小牛编辑
146浏览
2023-12-01

imi 的命令行工具使用注解来定义

注解

@Tool

Imi\Tool\Annotation\Tool,写在类上,用于定义工具名称

属性名称说明
name工具名称

@Operation

Imi\Tool\Annotation\Operation,写在方法上,用于定义工具动作名称

属性名称说明
name工具动作名称
co是否自动开启协程,默认为true

@Arg

Imi\Tool\Annotation\Arg,写在方法上,可以有多个,用于定义工具参数

属性名称说明
name参数名称
type参数类型,支持:string/int/float/boolean/array,也可以使用\Imi\Tool\ArgType::XXX
default默认值
required是否是必选参数,默认false
comments注释

工具定义

namespace ImiApp\Tool;

use Imi\Tool\Annotation\Tool;
use Imi\Tool\Annotation\Operation;
use Imi\Tool\Annotation\Arg;

/**
 * @Tool("test")
 */
class Test
{
    /**
     * @Operation("hello")
     * @Arg(name="username", type="string", default="默认值")
     */
    public function hello($username)
    {
        echo "hello {$username}", PHP_EOL;
    }

}

beanScan

工具所在命名空间必须在项目配置@app.beanScan中定义

如上面例子中的ImiApp\Tool必须定义在@app.beanScan

加载注解

默认命令行工具是不加载项目子模块(子服务器)中的注解的,如需使用请调用:

\Imi\Bean\Annotation::getInstance()->init(\Imi\Main\Helper::getAppMains());

工具调用

imi 工具名称/动作名称 -参数名 参数值

上面的例子调用示例:

imi test/hello -username yurun