germania-kg/yaml-services

可调用的Symfony YAML包装器,支持Pimple服务提供者和PSR-3日志记录器

1.0.8 2022-03-30 10:09 UTC

This package is auto-updated.

Last update: 2024-08-29 04:48:24 UTC


README

围绕Symfony的YAML组件的可调用包装器,支持Pimple 3服务提供者和可选的PSR3日志记录器。

Packagist PHP version Build Status Scrutinizer Code Quality Code Coverage Build Status

使用Composer安装

$ composer require germania-kg/yaml-services

解析YAML字符串

<?php
use Germania\YamlServices\YamlParserCallable;

// Instantiate
$parser = new YamlParserCallable;

// Do business, assuming YAML content string
$result = $parser( $yaml_content );

// Evaluate, usually Array [...]
print_r( $result );

解析YAML文件

<?php
use Germania\YamlServices\YamlFileParserCallable;
use Symfony\Component\Finder\Finder;

// Instantiate, passing a Symfony Finder
$finder = new Finder;
$finder = $finder->depth( 0 )->in( [ 'contents', 'includes'] );

// Setup parser
$parser = new YamlFileParserCallable( $finder );

// Do business, just passing your YAML file:
$result = $parser( "config.yaml" );

// Evaluate, usually Array [...]
print_r( $result );

配置

YamlParserCallable和YamlFileParserCallable都接受通常的YAML解析器选项,如以下所述:[Symfony YAML组件](https://symfony.com.cn/doc/current/components/yaml.html)或[GitHub](https://github.com/symfony/yaml)。—另外,构造函数接受任何[PSR 3 Logger](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md)。

示例1:YamlParserCallable

<?php
use Germania\YamlServices\YamlParserCallable;
use Symfony\Component\Yaml;

$parser = new YamlParserCallable( Yaml::PARSE_OBJECT );
$parser = new YamlParserCallable( Yaml::PARSE_OBJECT, $psr3_logger );

// Or, use per-case parsing options:
$custom_flags = Yaml::PARSE_OBJECT | YAML::PARSE_OBJECT_FOR_MAP;
$result = $parser($yaml_content, $custom_flags);
print_r( $result );

示例2:YamlFileParserCallable

<?php
use Germania\YamlServices\ YamlFileParserCallable;
use Symfony\Component\Finder\Finder;
use Symfony\Component\Yaml;

// Configure your Finder 
$finder = new Finder;
$finder = $finder->depth( 0 )->in( [ 'contents', 'includes'] );

// Setup parser
$parser = new YamlParserCallable( $finder, Yaml::PARSE_OBJECT );
$parser = new YamlParserCallable( $finder, Yaml::PARSE_OBJECT, $psr3_logger );

// Or, use per-case parsing options:
$custom_flags = Yaml::PARSE_OBJECT | YAML::PARSE_OBJECT_FOR_MAP;
$result = $parser( "config.yaml", $custom_flags);
print_r( $result );

Pimple服务提供者

注册服务提供者

<?php
use Germania\YamlServices\PimpleServiceProvider;

// Have your Pimple Container ready...
$dic = new Pimple\Container;

// Instantiate and register
$yaml_services = new PimpleServiceProvider;
$dic->register( $yaml_services );

使用YAML服务

<?php
// To parse a string
$parser = $dic['Yaml.Parser'];
$result = $parser( "My YAML string" );

// To parse a file
$parser = $dic['Yaml.FileParser'];
$result = $parser( "config.yaml" );

配置服务提供者

PimpleServiceProvider构造函数允许您可选地传递以下依赖

  • YAML解析器选项,服务名称:Yaml.Flags
  • Symfony Finder实例,服务名称:Yaml.Finder
  • PSR 3 Logger实例,服务名称:Yaml.Logger
$yaml_services = new PimpleServiceProvider( yaml_options, $finder, $psr3_logger) ;
$dic->register( $yaml_services );

由于所有依赖项也是Pimple服务,因此您可以像这样覆盖每个服务

$dic->register( new PimpleServiceProvider );

$dic->extend('Yaml.Flags', function( $flags, $dic) {
    return $flags | YAML::PARSE_OBJECT_FOR_MAP;
});

$dic->extend('Yaml.Finder', function( $finder, $dic) {
    return $dic['MyCustomFinder'];
});

$dic->extend('Yaml.Logger', function( $logger, $dic) {
    return $dic['Logger']->withName('YAML');
});

开发

$ git clone https://github.com/GermaniaKG/YAML-Services.git
$ cd YAML-Services
$ composer install

单元测试

要么将phpunit.xml.dist复制到phpunit.xml并根据您的需求进行修改,要么保持原样。运行PhpUnit测试或composer脚本如下

$ composer test
# or
$ vendor/bin/phpunit