ergebnis / twig-front-matter
提供了一种用于具有YAML前置内容的文件的Twig加载器。
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- ergebnis/front-matter: ^3.1.0
- twig/twig: ^3.4.3
Requires (Dev)
- ergebnis/composer-normalize: ^2.39.0
- ergebnis/data-provider: ^3.0.0
- ergebnis/license: ^2.2.0
- ergebnis/php-cs-fixer-config: ^6.10.0
- ergebnis/phpstan-rules: ^2.1.0
- ergebnis/phpunit-slow-test-detector: ^2.3.2
- fakerphp/faker: ^1.23.0
- infection/infection: ~0.27.6
- phpunit/phpunit: ^10.4.2
- psalm/plugin-phpunit: ~0.18.4
- rector/rector: ~0.18.6
- vimeo/psalm: ^5.15.0
This package is auto-updated.
Last update: 2024-09-10 04:48:16 UTC
README
此项目提供了一个带有composer
包的Twig加载器,用于具有YAML前置内容的文件。
安装
运行
composer require ergebnis/twig-front-matter
用法
使用FrontMatterLoader
加载Twig模板
此项目包含一个FrontMatterLoader
,您可以使用它来加载带有YAML前置内容的Twig模板。
FrontMatterLoader
- 解析一个Twig模板,并使用`ergebnis/front-matter`将前置内容与主体内容分离
- 将前置内容数据转换为Twig赋值,使用
Converter\FrontMatterConverter
的实现 - 返回一个新的Twig源,它将前置内容数据中的Twig赋值与Twig模板的主体内容合并
YAML前置内容
假设您有一个带有以下YAML前置内容的Twig模板
foo: bar number: 1234 pi: 3.14159 date: 2016-05-27 empty: ~ invalid-key: "hmm" multiline: | Multiple Line String object: key: value datetime: 2020-11-12 12:54:12 values: - one - two
使用Converter/ToMultipleAssignmentsFrontMatterConverter
将YAML前置内容转换为Twig赋值
此项目包含一个Converter/ToMultipleAssignmentsFrontMatterConverter.php
,您可以使用它将YAML前置内容转换为多个Twig赋值。
以下示例将解析的YAML前置内容数据转换为多个Twig赋值,将数据强制分配给Twig变量
declare(strict_types=1); use Ergebnis\Twig; $frontMatterConverter = new Twig\FrontMatter\Converter\ToMultipleAssignmentsFrontMatterConverter(true); echo $frontMatterConverter->convert($data);
{% set foo = "bar" %} {% set number = 1234 %} {% set pi = 3.14159 %} {% set date = (1464307200|date_modify('0sec')) %} {% set empty = null %} {% set multiline = "Multiple\nLine\nString\n" %} {% set object = { key: "value", datetime: (1605185652|date_modify('0sec')), values: { 0: "one", 1: "two" } } %}
以下示例将解析的YAML前置内容数据转换为多个Twig赋值,将数据分配给Twig变量而不强制(考虑到您可能已向模板传递变量,并且您希望不使用前置内容覆盖这些变量)
declare(strict_types=1); use Ergebnis\Twig; $frontMatterConverter = new Twig\FrontMatter\Converter\ToMultipleAssignmentsFrontMatterConverter(false); echo $frontMatterConverter->convert($data);
{% set foo = foo is defined ? foo : "bar" %} {% set number = number is defined ? number : 1234 %} {% set pi = pi is defined ? pi : 3.14159 %} {% set date = date is defined ? date : (1464307200|date_modify('0sec')) %} {% set empty = empty is defined ? empty : null %} {% set multiline = multiline is defined ? multiline : "Multiple\nLine\nString\n" %} {% set object = object is defined ? object|merge({ key: "value", datetime: (1605185652|date_modify('0sec')), values: { 0: "one", 1: "two" } }) : { key: "value", datetime: (1605185652|date_modify('0sec')), values: { 0: "one", 1: "two" } } %}
使用Converter/ToSingleAssignmentFrontMatterConverter
将YAML前置内容转换为Twig赋值
此项目包含一个Converter/ToSingleAssignmentFrontMatterConverter.php
,您可以使用它将YAML前置内容转换为单个Twig赋值。
以下示例将解析的YAML前置内容数据转换为单个Twig赋值,将数据强制分配给Twig变量
declare(strict_types=1); use Ergebnis\Twig; $frontMatterConverter = new Twig\FrontMatter\Converter\ToSingleAssignmentFrontMatterConverter( Twig\Expression\Name::fromString('data'), false, ); echo $frontMatterConverter->convert($data);
{% set data = { foo: "bar", number: 1234, pi: 3.14159, date: (1464307200|date_modify('0sec')), empty: null, invalid-key: "hmm", multiline: "Multiple\\nLine\\nString\\n", object: { key: "value", datetime: (1605185652|date_modify('0sec')), values: { 0: "one", 1: "two" } } } %}
以下示例将解析的YAML前置内容数据转换为单个Twig赋值,将数据分配给Twig变量而不强制(考虑到您可能已向模板传递变量,并且您希望不使用前置内容覆盖此变量)
declare(strict_types=1); use Ergebnis\Twig; $frontMatterConverter = new Twig\FrontMatter\Converter\ToSingleAssignmentFrontMatterConverter( Twig\Expression\Name::fromString('data'), false, ); echo $frontMatterConverter->convert($data);
{% set data = data is defined ? data|merge({ foo: "bar", number: 1234, pi: 3.14159, date: (1464307200|date_modify('0sec')), empty: null, invalid-key: "hmm", multiline: "Multiple\\nLine\\nString\\n", object: { key: "value", datetime: (1605185652|date_modify('0sec')), values: { 0: "one", 1: "two" } } }) : { foo: "bar", number: 1234, pi: 3.14159, date: (1464307200|date_modify('0sec')), empty: null, invalid-key: "hmm", multiline: "Multiple\\nLine\\nString\\n", object: { key: "value", datetime: (1605185652|date_modify('0sec')), values: { 0: "one", 1: "two" } } } %}
在Symfony项目中配置服务
根据以下内容调整您的config/services.php
以注册一个带有Converter\ToMultipleAssignmentsFrontMatterConverter
的FrontMatterLoader
<?php declare(strict_types=1); use Ergebnis\FrontMatter; use Ergebnis\Twig; use Symfony\Component\DependencyInjection; return static function (DependencyInjection\Loader\Configurator\ContainerConfigurator $containerConfigurator): void { $services = $containerConfigurator->services(); $services->defaults() ->autoconfigure() ->autowire(); $services->alias( FrontMatter\Parser::class, FrontMatter\YamlParser::class, ); $services->set(FrontMatter\YamlParser::class) ->class(FrontMatter\YamlParser::class); $services->set(Twig\FrontMatter\Converter\FrontMatterConverter::class) ->class(Twig\FrontMatter\Converter\ToMultipleAssignmentsFrontMatterConverter::class) ->args([ '$force' => false, // or true, as you prefer ]); $services->set(Twig\FrontMatter\FrontMatterLoader::class) ->args([ '$loader' => new DependencyInjection\Loader\Configurator\ReferenceConfigurator('twig.loader.native_filesystem'), ]); });
变更日志
此项目的维护者将此项目的显著变更记录在变更日志中。
贡献
本项目维护者建议遵循贡献指南。
行为准则
本项目维护者要求贡献者遵循行为准则。
一般支持政策
本项目提供有限的支持。
您可以通过赞助 @localheinz 或 申请此项目相关服务的发票来支持本项目的维护。
PHP 版本支持政策
本项目支持拥有活跃和安全支持的 PHP 版本。
本项目在其初始发布后添加对 PHP 版本的支持,并在其安全支持结束时停止支持。
安全策略
本项目有一个安全策略。
许可证
本项目使用MIT 许可证。
社交
在 Twitter 上关注 @localheinz 和 @ergebnis。