aptoma / twig-markdown
用于处理Markdown内容的Twig扩展
Requires
- php: ^7.0|^8.0
- twig/twig: ^2.7.0|^3.0
Requires (Dev)
- php: ^7.2.5|^8.0
- erusev/parsedown: ^1.6
- guzzlehttp/guzzle: ^7.2
- http-interop/http-factory-guzzle: ^1.0
- knplabs/github-api: ~3.0
- league/commonmark: ~0.5
- michelf/php-markdown: ~1
- phpunit/phpunit: ~6.0|~5.0|~8.0
Suggests
- knplabs/github-api: Needed for using GitHub's Markdown engine provided through their API.
- michelf/php-markdown: Original Markdown engine with MarkdownExtra.
README
此扩展不再维护,我们不会发布任何新版本。如果有人想接管,请创建分支并发布新包,我们将链接到新版本。
Twig Markdown扩展提供了新的过滤器标签,允许在Twig模板中将内容解析为Markdown。
此扩展可以与多个Markdown解析器集成,因为它提供了一个接口,允许您自定义Markdown解析器。
支持的解析器
- michelf/php-markdown (+ MarkdownExtra)
- league/commonmark
- KnpLabs/php-github-api
- erusev/parsedown
功能
- 过滤器支持
{{ "# Heading Level 1"|markdown }}
- 标签支持
{% markdown %}{% endmarkdown %}
当用作标签时,第一行的缩进级别将设置标签内容的默认缩进级别。从这个缩进级别开始,所有相同缩进或缩进较少的级别文本都将转换为普通文本。
此功能允许您在任意缩进级别编写Markdown内容,无需担心Markdown内部转换。
<div> <h1 class="someClass">{{ title }}</h1> {% markdown %} This is a list that is indented to match the context around the markdown tag: * List item 1 * List item 2 * Sub List Item * Sub Sub List Item The following block will be transformed as code, as it is indented more than the surrounding content: $code = "good"; {% endmarkdown %} </div>
安装
运行composer命令安装最新稳定版本
composer require aptoma/twig-markdown
或更新您的composer.json
{ "require": { "aptoma/twig-markdown": "~3.0" } }
您可以选择提供自己的Markdown引擎,尽管我们建议使用michelf/php-markdown
composer require michelf/php-markdown ~1.8
{ "require": { "michelf/php-markdown": "~1.8" } }
您还可以使用PHP League CommonMark引擎
composer require league/commonmark ~0.19
{ "require": { "league/commonmark": "~0.19" } }
使用方法
Twig扩展
该扩展提供了markdown
标签和过滤器支持。
假设您正在使用composer自动加载,将扩展添加到Twig环境中
use Aptoma\Twig\Extension\MarkdownExtension; use Aptoma\Twig\Extension\MarkdownEngine; $engine = new MarkdownEngine\MichelfMarkdownEngine(); $twig->addExtension(new MarkdownExtension($engine));
Twig标记解析器
该标记解析器仅提供markdown
标签!
use Aptoma\Twig\TokenParser\MarkdownTokenParser; $twig->addTokenParser(new MarkdownTokenParser());
Symfony
要在Symfony 3/4应用(包括Pimcore)中使用此扩展,请将以下代码片段添加到您的应用app/config/services.yml
文件中
services: # ... markdown.engine: class: Aptoma\Twig\Extension\MarkdownEngine\MichelfMarkdownEngine twig.markdown: class: Aptoma\Twig\Extension\MarkdownExtension arguments: ['@markdown.engine'] tags: - { name: twig.extension }
GitHub Markdown引擎
MarkdownEngine\GitHubMarkdownEngine
通过 KnpLabs\php-github-api
提供了使用 GitHub 公共 API 访问 GitHub 的 markdown 引擎的接口。为了减少 API 调用,渲染的文档会被哈希并在文件系统中进行缓存。您可以将 GitHub 仓库和用于缓存的路径传递给构造函数
use Aptoma\Twig\Extension\MarkdownEngine; $engine = new MarkdownEngine\GitHubMarkdownEngine( 'aptoma/twig-markdown', // The GitHub repository to use as a context true, // Whether to use GitHub's Flavored Markdown (GFM) '/tmp/markdown-cache', // Path on filesystem to store rendered documents );
为了验证 API 客户端(例如),您可以传递一个自己的 \GitHub\Client
实例,而不是让引擎自己创建一个
$client = new \Github\Client; $client->authenticate('GITHUB_CLIENT_ID', 'GITHUB_CLIENT_SECRET', \Github\Client::AUTH_URL_CLIENT_ID); $engine = new MarkdownEngine\GitHubMarkdownEngine('aptoma/twig-markdown', true, '/tmp/markdown-cache', $client);
使用不同的 Markdown 解析器引擎
如果您想使用不同的 Markdown 解析器,您需要创建一个实现 Aptoma\Twig\Extension\MarkdownEngineInterface.php
的适配器。可以参考 Aptoma\Twig\Extension\MarkdownEngine\MichelfMarkdownEngine
作为一个例子。
测试
测试套件使用 PHPUnit
$ phpunit
许可
Twig Markdown 扩展在 MIT 许可下。