ergebnis/twig-front-matter

提供了一种用于具有YAML前置内容的文件的Twig加载器。

1.1.0 2023-11-01 16:33 UTC

This package is auto-updated.

Last update: 2024-09-10 04:48:16 UTC


README

Integrate Merge Release Renew

Code Coverage Type Coverage

Latest Stable Version Total Downloads Monthly Downloads

此项目提供了一个带有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\ToMultipleAssignmentsFrontMatterConverterFrontMatterLoader

<?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