mikoweb/php-cli-executor

v1.1.0 2022-02-13 02:03 UTC

This package is auto-updated.

Last update: 2024-09-13 07:35:36 UTC


README

用于CLI应用程序执行、输出解析和验证的库。

安装

composer require mikoweb/php-cli-executor

使用示例

在您的应用文件中

require_once __DIR__ . '/vendor/autoload.php';

use Mikoweb\CLIExecutor\Executor;
use Mikoweb\CLIExecutor\Config;
use Mikoweb\CLIExecutor\Validator\Validator;
use Mikoweb\CLIExecutor\Validator\Exceptions\InvalidOutputException;

$config = new Config(__DIR__ . '/sample-cli.php'); // set path to your CLI script
// $config = new Config('cli_path', 'php_bin_or_other'); // you can set php bin path

$executor = new Executor($config);
$validator = new Validator();

$output = $executor->execute(['app:test']); // set command options, arguments etc.

try {
    $validator->validate($output);
    // $validator->validate($output, false); // if set false in second argument method not throw exception and return ValidationResultInterface

    echo $output->isSuccessful());
    echo $output->getStatus()); // output status code like http
    echo $output->getData()->get('message')); // you can get result property
    // echo $output->getData()->getData(); // or you can get full data
} catch (InvalidOutputException $exception) {
    echo $output->getErrorMessage());
    echo $output->getStatus());
    
    // you can access to $exception->getValidationResult(), $exception->getMessage(), $exception->getCode() etc. 
}

使用 WriterBuilder 成功的示例 sample-cli.php

require_once __DIR__ . '/vendor/autoload.php';

use Mikoweb\CLIExecutor\Writer\WriterBuilder;

$writer = new WriterBuilder();
$writer
    ->setMessage('ok')
    ->printMessageAsSuccess(true)
    ->write()
;

exit(0);

使用 WriterBuilder 失败的示例 sample-cli.php

$writer = new WriterBuilder();
$writer
    ->setErrorMessage("something's wrong")
    ->printErrorMessageAsError(true)
    ->setStatus(OutputStatus::STATUS_INTERNAL_ERROR)
    ->write()
;

成功原始示例 sample-cli.php

echo '
Lorem ipsum // unnecessary, example

<output>
{
    "message": "ok",
    "status": 200
}
</output>

Lorem ipsum // unnecessary, example
';

exit(0);

失败原始示例 sample-cli.php

echo '
<output>
{
    "error_message": "something\'s wrong",
    "status": 500
}
</output>
';

exit(0);

也失败 sample-cli.php

exit(1);

自定义输出解析器

默认情况下,使用 JsonOutputParser。您可以根据需要创建自己的解析器,例如 XmlOutputParser

class XmlOutputParser extends AbstractOutputParser
{
    public function decode(string $data): array
    {
        return simplexml_to_assoc(simplexml_load_string($data));
    }
}

将解析器作为 Executor 参数设置

$executor = new Executor($config, new XmlOutputParser());

自定义序列化器

默认情况下,使用 JsonSerializer。您可以根据需要创建自己的序列化器,例如 XmlSerializer

class XmlSerializer implements SerializerInterface
{
    public function serialize(array $data): string
    {
        return JMS::serialize($data, 'xml');
    }
}

将序列化器作为 WriterBuilder 参数设置

$writer = new WriterBuilder(new XmlSerializer());

测试

php7.1 composer.phar install --dev
php7.1 ./vendor/bin/phpunit tests

版权

版权所有 (c) Rafał Mikołajun 2022。