germania-kg / yaml-services
可调用的Symfony YAML包装器,支持Pimple服务提供者和PSR-3日志记录器
1.0.8
2022-03-30 10:09 UTC
Requires
- php: ^5.6|^7.0
- pimple/pimple: ^3.0
- psr/log: ^1.0
- symfony/finder: ^3.0
- symfony/yaml: ^3.2
Requires (Dev)
- php-coveralls/php-coveralls: ^2.0
- phpunit/phpunit: ^5.7|^6.0|^7.0
README
围绕Symfony的YAML组件的可调用包装器,支持Pimple 3服务提供者和可选的PSR3日志记录器。
使用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