爱欧伽米 / 控制台
开发人员面试的测试任务
0.0.3
2022-12-20 12:11 UTC
Requires
- php: >=7.4
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