人気のPHP WEBアプリケーションフレームワークLaravelのTipsを記録していきます

Laravel の Blade で テンプレートファイルの代わりに文字列からレンダリングする

● Laravel の Blade で テンプレートファイルの代わりに文字列からレンダリングする

    private function renderString($string, $data)
    {
        $php = \Illuminate\Support\Facades\Blade::compileString($string);

        $obLevel = ob_get_level();
        ob_start();
        extract($data, EXTR_SKIP);

        try {
            eval('?' . '>' . $php);
        } catch (Exception $e) {
            while (ob_get_level() > $obLevel) ob_end_clean();
            throw $e;
        } catch (Throwable $e) {
            while (ob_get_level() > $obLevel) ob_end_clean();
            throw new FatalThrowableError($e);
        }

        return ob_get_clean();
    }

● 使い方

$user = \App\User::first();
$text = "こんにちは {{$user->name}} さん";
$html = $this->renderString($text, compact('user'));
dump( $html );

● 注意点

{{$user->name}}

としてください。

{{ $user->name }}

ではエラーになる場合があります。

No.1526
08/28 15:11

edit