webuni / front-matter
PHP 的前端解析器和转储器
2.0.0
2024-02-22 07:39 UTC
Requires
- php: ^7.4 || ^8.0
- symfony/yaml: ^3.4.31 || ^4.3.4 || ^5.0 || ^6.0 || ^7.0
Requires (Dev)
- ext-json: *
- friendsofphp/php-cs-fixer: ^3.41
- league/commonmark: ^2.0
- mthaml/mthaml: ^1.3
- nette/neon: ^2.2 || ^3.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.6
- twig/twig: ^3.0
- yosymfony/toml: ^1.0
Suggests
- nette/neon: If you want to use NEON as front matter
- yosymfony/toml: If you want to use TOML as front matter
README
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