【Laravel】 markdown で書いてある blade を読み込みたかった
検索したらヒットしました。
すぐできる!Bladeにmarkdownが使えるディレクティブをつくる【Laravel】 https://blog.capilano-fw.com/?p=4668
composer require erusev/parsedown
ほほうー。便利なライブラリがあるのですね。
app/Providers/AppServiceProvider.php
を開いて以下のコードを追加してください。
<?php // App\Providers\AppServiceProvider::boot() public function boot() { Blade::directive('markdown', function ($expression) { $markdown = view( str_replace('\'', '', $expression) )->render(); $Parsedown = new \Parsedown(); return $Parsedown->text($markdown); }); }
んー。でもこれだと動的に markdown 読み込めないですねー。理想は、Controller から読み込むべき markdown ファイル名を用意して、view で受け取り・ファイル include したい。
というわけで、一部書き換えました。
<?php // App\Providers\AppServiceProvider::boot() public function boot() { Blade::directive('markdown', function ($expression) { return "<?php echo (new \Parsedown())->text(view($expression)->render());?>"; }); }
もっといい方法があるかもですけど、とりあえず blade に処理を丸投げする形でよろしいでしょうか。
<?php // なんとか.blade.php @markdown($markdown_file_name)
もちろん、$expression
として渡す変数 (ファイル名の文字列が格納されている) は、入力値として危険でないかチェックされている前提です。
最適解かは分かりませんが、やりたいことを実現はしたので、満足しました。