webuni/front-matter

PHP 的前端解析器和转储器

2.0.0 2024-02-22 07:39 UTC

This package is auto-updated.

Last update: 2024-09-06 17:40:31 UTC


README

Packagist Quality Gate Status Coverage

PHP 最通用的前端解析器和转储器(yaml、json、neon、toml)。前端允许在页面顶部包含页面特定的变量。

安装

此库可以通过 Composer 安装

composer require webuni/front-matter

用法

自动前端解析和解析

此库可以解析所有形式的前端

以下代码将自动检测上述前端类型

<?php

$frontMatter = \Webuni\FrontMatter\FrontMatterChain::create();
$document = $frontMatter->parse($string);

$data = $document->getData();
$content = $document->getContent();

解析任意字符串

<?php

$frontMatter = new \Webuni\FrontMatter\FrontMatter();

$document = $frontMatter->parse($string);

$data = $document->getData();
$content = $document->getContent();

检查字符串是否具有前端

<?php

$frontMatter = new \Webuni\FrontMatter\FrontMatter();

$hasFrontMatter = $frontMatter->exists($string);

Twig 加载器

如果您想存储有关 twig 模板的元数据,例如。

{#---
title: Hello world
menu: main
weight: 20
---#}
{% extend layout.html.twig %}
{% block content %}
Hello world!
{% endblock %}

您可以使用 FrontMatterLoader,该加载器装饰另一个 Twig 加载器

$frontMatter = \Webuni\FrontMatter\Twig\TwigCommentFrontMatter::create();
$loader = new \Twig\Loader\FilesystemLoader(['path/to/templates']);
$loader = new \Webuni\FrontMatter\Twig\FrontMatterLoader($frontMatter, $loader);

$twig = new \Twig\Environment($loader);
$content = $twig->render('template', []);
// rendered the valid twig template without front matter

可以将前端注入到 Twig 模板中作为变量

// …
$converter = \Webuni\FrontMatter\Twig\DataToTwigConvertor::vars();
$loader = new \Webuni\FrontMatter\Twig\FrontMatterLoader($frontMatter, $loader, $converter);
// …

加载的 Twig 模板具有此代码

{% set title = "Hello world" %}
{% set menu = "main" %}
{% set weight = 20 %}
{% line 5 %}
{% extend layout.html.twig %}
{% block content %}
Hello world!
{% endblock %}

可用的转换器

Markdown

最常用的前端是用于 markdown 文件

---
layout: post
title: I Love Markdown
tags:
  - test
  - example
---

# Hello World!

此库可以与 league/commonmark 一起使用

$frontMatter = new \Webuni\FrontMatter\FrontMatter();
$extension = new \Webuni\FrontMatter\Markdown\FrontMatterLeagueCommonMarkExtension($frontMatter);

$converter = new \League\CommonMark\CommonMarkConverter([]);
$converter->getEnvironment()->addExtension($extension);
$html = $converter->convertToHtml('markdown'); // html without front matter

替代方案