PHP の View テンプレートである Twig は使いやすいが、
Slim + Twig で細かいことをしようとすると少し面倒。
下記、 API から受け取った Markdown 記法の文字データを簡単に扱いたいなどのためのサンプルコード。
Twig のドキュメント通りの方法
twigphp/markdown-extension をインストールする
$ cd /path/to/your/project
# bin/ に composer があること前提
$ bin/composer require twig/markdown-extension
src/dependencies.php
use Twig\Markdown\DefaultMarkdown;
use Twig\Markdown\MarkdownExtension;
use Twig\Markdown\MarkdownRuntime;
use Twig\RuntimeLoader\RuntimeLoaderInterface;
$container = $app->getContainer();
$container['view'] = function ($c) {
$settings = $c->get('settings')['renderer'];
$view = new \Slim\Views\Twig($settings['template_path'], []);
$basePath = rtrim(str_ireplace('index.php', '', $c['request']->getUri()->getBasePath()), '/');
$view->addExtension(new \Slim\Views\TwigExtension($c['router'], $basePath));
// Markdown を使えるようにする
// https://github.com/twigphp/markdown-extension
$view->addExtension(new MarkdownExtension());
$view->getEnvironment()->addRuntimeLoader(new class implements RuntimeLoaderInterface {
public function load($class) {
if (MarkdownRuntime::class === $class) {
return new MarkdownRuntime(new DefaultMarkdown());
}
}
});
return $view;
};
index.phtml
<!-- 使い方1 -->
{{ post.body|markdown }}
<!-- 使い方2 -->
{% filter markdown %}
# Title
Hello!
{% endfilter %}
<!-- 使い方3 -->
{{ "# success"|markdown }}
エラーが出る
An exception has been thrown during the rendering of a template ("You cannot use the "markdown" filter as no Markdown library is available; try running "composer require erusev/parsedown".").
Markdown ライブラリーが入ってないので使えません。とのこと
"composer require erusev/parsedown" を試してください。とのこと
erusev/parsedown をインストールする
$ cd /path/to/your/project
$ bin/composer require erusev/parsedown
Github から他の Markdown パーサーをインストールして使う方法
PHP の Markdown パーサーは色々あるので、
好きなものを使いたい時のサンプルコード。
cebe/markdown しか試していない。
cebe/markdown をインストールする
$ cd /path/to/your/project
$ bin/composer require cebe/markdown "~1.2.0"
src/dependencies.php
- markdown の細かい設定もできる
use cebe\markdown\GithubMarkdown;
$container = $app->getContainer();
$container['view'] = function ($c) {
$settings = $c->get('settings')['renderer'];
$view = new \Slim\Views\Twig($settings['template_path'], []);
$basePath = rtrim(str_ireplace('index.php', '', $c['request']->getUri()->getBasePath()), '/');
$view->addExtension(new \Slim\Views\TwigExtension($c['router'], $basePath));
// Markdown を使えるようにする
// return ではなく echo しているところに注意
$view->getEnvironment()->addFilter(new Twig_SimpleFilter('markdown', function ($string) {
// use github markdown
$parser = new GithubMarkdown();
$parser->enableNewlines = true;
echo $parser->parse($string);
// return $parser->parse($string);
}));
return $view;
};
index.phtml
- 使い方はさっきと同様
<!-- 使い方1 -->
{{ post.body|markdown }}
<!-- 使い方2 -->
{% filter markdown %}
# Title
Hello!
{% endfilter %}
<!-- 使い方3 -->
{{ "# success"|markdown }}