degraciamathieu/clike

此包已被弃用且不再维护。未建议替代包。

此包允许您运行一个类似于命令系统的设计模式的类

v1.2.0 2020-07-01 08:46 UTC

This package is auto-updated.

Last update: 2023-03-29 00:28:15 UTC


README

68747470733a2f2f6931372e73657276696d672e636f6d2f752f6631372f31312f31332f36312f33322f636c696b6531302e706e67

Scrutinizer Code Quality Build Status Code Coverage PHP range Latest Version on Packagist 68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f64656772616369616d6174686965752f636c696b652e7376673f7374796c653d666c61742d737175617265

DeGraciaMathieu/Clike

命令设计模式对于创建可以由后续单独模块实现更多功能的模块化组件的命令行外壳应用程序非常有用。

安装

在以下控制台中运行命令以将包下载到您的项目

composer require degraciamathieu/clike

用法

创建一个命令

命令是一个必须实现接口 DeGraciaMathieu\Clike\Contracts\Command::class 的类。

以下是一个有效的命令示例。

use DeGraciaMathieu\Clike\Lines;
use DeGraciaMathieu\Clike\Contracts;

class Clear implements Contracts\Command {

    /**
     * Get the command description
     */
    public function description() :string
    {
        return 'Command description...';
    }

    /**
     * Check if the command is executable
     */
    public function authorized() :bool
    {
        return true;
    }

    /**
     * Bind of this command
     */
    public function binding() :string
    {
        return '/clear';
    }

    /**
     * Code executed by this command
     */
    public function process() :void
    {
        //
    }

    /**
     * Output of this command
     */
    public function output() :array
    {
        return [
            new Lines\Info('Output text...'),
        ];
    }
}

执行一个命令

现在让我们来玩我们的 Clear 命令。

use DeGraciaMathieu\Clike\Command;

$command = new Command();
$command->execute(new Clear());

在确认我们可以使用 authorized 方法使用此命令后,此代码将执行我们的命令的 process 方法。

最终执行 output 方法,显示以下结果。

// array:2 [
//   "timestamp" => 1531339693
//   "lines" => array:1 [
//     0 => array:2 [
//       "type" => "info"
//       "content" => "Output text..."
//     ]
//   ]
// ]

在终端中执行命令

use DeGraciaMathieu\Clike\Terminal;

$terminal = new Terminal([
    Clear::class,
]);
$terminal->execute('/clear');

使用终端检索所有可用命令

use DeGraciaMathieu\Clike\Terminal;

$terminal = new Terminal([
    Clear::class,
]);
$terminal->getAvailableCommands();

// [
//     [
//       "binding" => "/clear"
//       "description" => "Command description..."
//     ]
// ]