爱欧伽米/控制台

开发人员面试的测试任务

0.0.3 2022-12-20 12:11 UTC

This package is auto-updated.

Last update: 2024-09-21 16:20:40 UTC


README

目录

如何安装

可以使用 Composer 安装 Konzole,只需在您的项目中执行此命令即可

composer require iogami/konzole

库配置

此库会自动在 Commands 文件夹中查找 php 脚本命令,该文件夹必须在与执行脚本相同的目录中。

例如,如果我们运行命令 php app.php example {帮助},则 Commands 文件夹必须与 app.php 文件位于同一目录中。

也可以指定自己的文件夹。

最简单的方法是在创建 Konzole 类实例时传递路径作为参数

$console = new Konzole('path/to/Commands');

对于 symfony 框架,可以应用 autowiring 方法并在配置中指定

# config\services.yaml

services:
  Konzole\Konzole:
    arguments:
      $commandsDirPath: 'path/to/Commands'

也可以在项目中创建一个名为 COMMANDS_DIR 的常量

define('COMMANDS_DIR', 'path/to/Commands');

注意!必须指定命令文件夹的路径和文件夹名。

调用库

调用库的简单示例

<?php

require_once('vendor/autoload.php');

use Konzole\Konzole;

$console = new Konzole();
// Your code here!!!
$console->execute();

添加自定义命令

要添加新命令,需要在 Commands 文件夹中创建具有以下结构的文件。

如果命令名称由两个或更多单词组成,则类的名称应写为 CommandName,但调用命令时应使用 command_name

创建的类中的 help 方法将在调用命令时传递参数 {帮助} 时被调用。

$/usr/bin/php app.php command_name {help}

在其他所有情况下,将调用 run 方法。此方法中的 $params 参数将包含在调用命令时在控制台中指定的参数。

还可以使用 Konzole\InputOutput\Output 类来在控制台中输出数据。

<?php

namespace Commands;

use Konzole\Command;

class Example extends Command {

    public function run(array $params = []): void
    {
        // TODO: Implement run() method.
    }

    public function help(): void
    {
        // TODO: Implement help() method.
    }
}

任务文本

需要开发一个库,该库提供在控制台中处理输入/输出(I/O)的功能,并允许最终开发人员实现自己的命令。

需要实现以下协议的启动参数处理

  • 命令名称作为第一个参数以任意格式传递;
  • 启动参数以花括号逗号分隔的以下格式传递
    • 单个参数: {arg}
    • 多个参数: {arg1,arg2,arg3}{arg1} {arg2} {arg3}{arg1,arg2} {arg3}
  • 启动参数以方括号分隔的以下格式传递
    • 具有单个值的参数: [name=value]
    • 具有多个值的参数: [name={value1,value2,value3}]

库功能包括

  • 在应用程序中注册必要的命令;
  • 可以设置每个命令的名称和描述;
  • 处理用户输入(解析参数和识别命令名称、参数和参数);
  • 执行指定逻辑,并能够在控制台中输出信息。

如果没有指定特定命令启动应用程序,则必须输出所有注册命令及其描述的列表。

如果启动任何命令时带有 {帮助} 参数,则必须输出命令描述。

最终命令的工作示例

$/usr/bin/php app.php example {verbose,overwrite} [log_file=app.log] {unlimited} [methods={create,update,delete}] [paginate=50] {log}

Called command: command_name

Arguments:
  - verbose
  - overwrite
  - unlimited
  - log

Options:
  - log_file
    - app.log
  - methods
    - create
    - update
    - delete
  - paginate
    - 50