ssitu/euclid

一个PHP工具,用于映射您的类和方法,以便您可以从命令行界面舒适地执行它们。

v2.0.2 2021-06-01 13:10 UTC

This package is auto-updated.

Last update: 2024-09-23 01:27:06 UTC


README

一个简单的PHP工具,用于映射您的类和方法,以便您可以从命令行界面舒适地执行它们。

包含

  • 核心Euclid类,用于处理您的命令,提供直接模式和引导模式;

  • 一个解析器,主要用于解析直接命令;

  • 类似于CRUD类的工具,用于配置您的命令映射:设置钩子以通过方法进行过滤;进行永久或实例编辑;保存编辑,可能保存到另一个配置文件;等等——可用的命令列表将自动更新;

  • 一个处理输入、输出和格式的伴随类,可以独立于Euclid使用;

  • 一个示例nano bin脚本,允许您在将其传递给Euclid之前编辑CLI参数。

入门指南

先决条件

  • 对CLI(CLI很棒——就像六十年代制造的大多数东西一样)有非常基本的了解
  • PHP 8.0.3(可能适用于早期版本;但未测试)
  • Composer

安装

$ composer require ssitu/euclid

设置一个bin/euclid文件,以及一个euclid-config.json以符合您的需求。示例文件在samples/中可用。

设置

  • bin/euclid文件
#!/usr/bin/php
<?php
use SSITU\Euclid\EuclidCore;
if (php_sapi_name() !== 'cli') {
exit;
}
require_once  dirname(__DIR__).'/vendor/autoload.php';

$Euclid = new  EuclidCore();
// or
$Euclid = new  EuclidCore($argv);
// or
$configPath = dirname(__DIR__).'/config/euclid.json';
$Euclid = new  EuclidCore($argv, $configPath);
// or even
$EuclidMap = new  EuclidMap();
$EuclidMap->initMap($configPath);
$EuclidMap->rmvFromMap('unsetme');
$EuclidMap->updtMap('demo', 'build*', 'methodHook');
$EuclidMap->saveMap();
$argv[4] = 'something else';
$Euclid = new  EuclidCore($argv, $EuclidMap);
  • CLI
$ php bin/euclid

# or to run Euclid and a command in one go (direct mode):
$ php bin/euclid classkey constrArg1 constrArg2 ->method methodArg1 methodArg2

第二种情况要求使用有效的配置文件路径或EuclidMap实例调用EuclidCore。

CLI

输入$随时退出。

引导模式

轻松浏览类和方法,然后输入任何必要的参数。只需遵循提示!

1 medicis
2 igor
Pick a class > 2

1  compileCreature
Pick a method > 1

[param1] $creatureFace
Enter argument > SomeFace

[param2] $creatureBrain|opt
Enter argument >

直接模式

命令看起来像这样

classkey ->method
# if your class constructor has parameters:
classkey constrArg1 constrArg2 ->method
# and if your method has parameters:
classkey constrArg1 constrArg2 ->method methodArg1 methodArg2

您可以通过输入#查看命令列表;通过输入?查看nano说明;您可以通过输入%切换到引导模式。

结果

通过传递命令后:将显示结果,您可以选择下一步要做什么。

[class] igor
[method] compileCreature
[return] 'Creature compiled without brain.'

$ exit
* edit map
1 reset | direct mode
2 reset | guided mode
3 re-run same cmd
4 call another method of class "igor"
5 call method "compileCreature" with new arguments

转义参数

字符串

要转义字符串:您可以将其包裹在双引号中,如果您正在自动化Euclid作业,您也可以使用urlencode()

示例

  • 如果您需要将$作为参数传递而不会使Euclid退出,请使用引号:"$"
  • 在直接模式中
    myclass ->mymethod "some string with spaces"
    这里的引号将防止"some string with spaces"被视为四个不同的参数。

数组

您可以使用EuclidCompanion中可用的方法parseArrayArgm($array),或者按以下方式传递它们

a[]=bob&a[]=0.5&a[b]="some other bob"

它将被解析为

[0 =>'bob',1 => 0.5,'b' => 'some other bob']

配置

概念

对于您希望从Euclid中调用的每个类,您需要设置

  • 类的“键名”,它将构成您的CLI命令的第一部分;示例:对于名为DemoDoer的类:其键名可以是demo(或... whatever)

  • 类的全名,前面是任何适用的命名空间;示例: SSITU\Euclid\Demo\DemoDoer

  • 可选的,一个“方法钩子”,即方法名或您希望目标的方法名中的前缀/后缀 - 因为并不是所有方法都适合CLI。

    • 如果是后缀,请用*前缀您的钩子:*yourHook
    • 如果是前缀:yourHook*
    • 示例:上述的DemoDoer类有3个方法:buildDirTreebuildFilesetBobName;可以将方法钩子设置为build*;因此setBobName不会被列在命令列表中。

请注意,受保护和私有函数 不能 通过CLI列出或调用。

JSON文件

如果您有一组要调用的类,将使用专门的JSON文件来存储它们的键/名称/钩子(以及它们自动构建的命令列表)。

{
"maps": {
	"demo": {
		"className": "SSITU\\Demo\\DemoDoer",
		"methodHook": "build*"
		}
	}
}

处理

您可以通过以下方式设置您的配置

  • 如果您愿意,可以手动编辑JSON文件;
  • 在CLI中使用Euclid(菜单“编辑”,键*);
  • 或者使用EuclidMap类及其CRUD-like方法。

用途

嗯,我个人使用这个库来自动化我的“构建任务”:编译、编辑、压缩、移动资源,如果出现问题,会给我发送消息。

贡献

当然可以!您可以查看CONTRIBUTING。这个仓库还有一个讨论标签。

许可证

本项目采用MIT许可证;有关详细信息,请参阅LICENSE