ssitu / euclid
一个PHP工具,用于映射您的类和方法,以便您可以从命令行界面舒适地执行它们。
Requires
- ssitu/jacktrades: ^2.1
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个方法:buildDirTree
、buildFile
、setBobName
;可以将方法钩子设置为build*
;因此setBobName
不会被列在命令列表中。
- 如果是后缀,请用
请注意,受保护和私有函数 不能 通过CLI列出或调用。
JSON文件
如果您有一组要调用的类,将使用专门的JSON文件
来存储它们的键/名称/钩子(以及它们自动构建的命令列表)。
{ "maps": { "demo": { "className": "SSITU\\Demo\\DemoDoer", "methodHook": "build*" } } }
处理
您可以通过以下方式设置您的配置
- 如果您愿意,可以手动编辑JSON文件;
- 在CLI中使用Euclid(菜单“编辑”,键*);
- 或者使用
EuclidMap
类及其CRUD-like方法。
用途
嗯,我个人使用这个库来自动化我的“构建任务”:编译、编辑、压缩、移动资源,如果出现问题,会给我发送消息。
贡献
当然可以!您可以查看CONTRIBUTING。这个仓库还有一个讨论标签。
许可证
本项目采用MIT许可证;有关详细信息,请参阅LICENSE。