mikoweb / php-cli-executor
PHP CLI 执行器
v1.1.0
2022-02-13 02:03 UTC
Requires
- php: >=7.1
- ext-json: *
- symfony/console: ^4.0|^5.0|^6.0
- symfony/process: ^4.0|^5.0|^6.0
Requires (Dev)
- phpunit/phpunit: ^7
- symfony/var-dumper: 4.0|^5.0|^6.0
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。