hi9a's blo9

こんにちは

【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 として渡す変数 (ファイル名の文字列が格納されている) は、入力値として危険でないかチェックされている前提です。

最適解かは分かりませんが、やりたいことを実現はしたので、満足しました。