2021-03-13
Laravel
Laravel8.x
LaravelでMarkdownをhtmlに変換・3
4年前の記事です。
Laravelは古い情報は全く役に立たないので絶対に参考にしないでください。
コメントに新しい情報がないか確認してください。
たぶん3回目。
Laravel8.x、league/commonmark
v1.x時代の情報。
Str:markdown()
少し前にStr:markdown()
が追加された。
The Laravel Framework. Contribute to laravel/framework development by creating an account on GitHub.
中身はこれなので通常の用途ならStr:markdown()
で十分。
/**
* Converts GitHub flavored Markdown into HTML.
*
* @param string $string
* @param array $options
* @return string
*/
public static function markdown($string, array $options = [])
{
$converter = new GithubFlavoredMarkdownConverter($options);
return $converter->convertToHtml($string);
}
ただし使う時はhtml_input
などを付けないと危険。
{!! Str::markdown($text, [
'html_input' => 'escape',
]) !!}
Str:markdown()以上のことが必要なら自作
app/Support/Markdown.php
<?php
namespace App\Support;
use Illuminate\Support\HtmlString;
use League\CommonMark\Environment;
use League\CommonMark\GithubFlavoredMarkdownConverter;
use League\CommonMark\Inline\Element\Link;
class Markdown
{
/**
* Parse the given Markdown text into HTML.
*
* @param string $text
* @param array $options
*
* @return HtmlString
*/
public static function parse(string $text, $options = []): HtmlString
{
$config = array_merge([
'html_input' => 'escape',
'allow_unsafe_links' => false,
'max_nesting_level' => 50,
], $options);
$converter = new GithubFlavoredMarkdownConverter($config);
return new HtmlString($converter->convertToHtml($text ?? ''));
}
}
Bladeで直接使うなら
{{ \App\Support\Markdown::parse($text) }}
Bladeコンポーネントならcomponents/markdown.blade.php
を作って
@props(['text' => '', 'options' => []])
{{ \App\Support\Markdown::parse($text, $options) }}
<x-markdown :text="$text"></x-markdown>
で使う。
URLを埋め込み
invokable.net ではさらにURLを埋め込みでブログカードのように変換してるけどEmbedRenderer
はLaravelとこのサイト専用な作りなので一般化してパッケージに分離はしにくい。キューが必須では使える人が限られる。
$environment = Environment::createGFMEnvironment();
$environment->addInlineRenderer(Link::class, app(EmbedRenderer::class));
$converter = new GithubFlavoredMarkdownConverter($config, $environment);