HTMLマクロを作成する


html

 悩み事

HTMLファサードを拡張して、機能を追加したい

 解決方法

HTML::macro()メソッドを利用します

HTML::macro()HTMLファサードを拡張して、独自のメソッドを追加する事ができます

最初にマクロを登録しましょう
その後にHTMLファサードを拡張して利用出来る様にします

app/start/global.phpファイルに下記の様に追加してみましょう

\HTML::macro('sumthin', function() {
    return '<sumthin>default</sumthin>';
});

その後、Bladeテンプレートで以下の様に記述します

{{HTML::sumthin()}}

この様に出力されます

<sumthin>default</sumthin>

マクロに引数を追加しましょう

sumthinマクロで引数を使える様に変更します

\HTML::macro('sumthin', function($value, $count = 10, $start = 1) {
    $build = [];
    while ($count > 0) {
        $build[] = sprintf('<sumthin index="%s">%s</sumthin>',
          $start, $value);
        $start += 1;
        $count -= 1;
    }
    return join("\n", $build);
});

HTML::sumthin()に必須の引数一つと、二つのオプションを追加しました
引数を指定しない場合、Laravelはエラーを返します

テンプレートで以下の様に記述します

{{HTML::sumthin('test', 5)}}

下記の様に出力されます

<sumthin index="1">test</sumthin>
<sumthin index="2">test</sumthin>
<sumthin index="3">test</sumthin>
<sumthin index="4">test</sumthin>
<sumthin index="5">test</sumthin>

 アドバイス

ソースコードを見てみましょう!

vendor/laravel/src/Illuminate\HtmlディレクトリのHtmlBuilder.phpを見ると、
リファレンス等に載っていないいくつかのpublicメソッドがあります

マクロで$thisにはアクセス出来ませんが、以下のメソッドを利用する事ができます:

マクロから他のマクロをコールする事ができます


Author:Chuck Heintzelman

Editor and Translator:Yuuki Takezawa