LoginSignup
4
3

More than 5 years have passed since last update.

【Laravel】Blade拡張の使い方(メモ)

Posted at

この記事について

laravelを最近使い始めた者です。
laravelのBlade拡張の使い方について備忘録を兼ねて投稿します。この記事では
・foreachなどの使い方
・関数の使い方
を書きます。
(※Qiita初投稿です。何か間違っている箇所があった場合はご指摘いただけると幸いです。)

Blade拡張について

ドキュメントはこちら
要するに@if@foreachなどのようなものを自分で作れるらしい。Blade内に自作の関数を作れたりするようで、便利そうなので色々試してみました。

foreachなどを使う場合

例えばある配列をforeachを使って処理することを試みました。最初に書いたのが以下のようなもの

AppServiceProvider.php
public function boot()
{
    Blade::directive('sample', function($array) {
        foreach($array as $value) {
            '何らかの処理'
        }
        return "<?php var_dump($array); ?>";
    });
}

しかし、これでは以下のようなエラーが出てしまいました。

Invalid argument supplied for foreach()

解決法

returnの中にforeach文を書けば出来ました。

AppServiceProvider.php
public function boot()
{
    Blade::directive('sample', function($array) {
        return "<?php foreach($array as $value) { '何らかの処理' } var_dump($array); ?>";
    });
}

ただ長い処理を書くとすごいわかりにくくなってしまうかも…。
何か他にやり方がある場合は教えてくださいm(_ _)m

関数を使いたい場合

自作の関数を作って使いたいと思った場合も
躓きました。
これもすべて<?php ?>の中に書いてしまい、先に関数を宣言することで解決しました。例えば以下のような形で実装しました。

AppServiceProvider.php
public function boot()
{
    Blade::directive('sampleFnc', function($array) {
        return "<?php function sampleFnc($i) { $result = $i * 2; return $result; } ?>";
    });

    Blade::directive('sample', function($array) {
        return "<?php $test = 2; $test = sampleFnc($test); echo $test; ?>";
    });
}
index.blade.php
//関数を宣言
@sampleFnc
//実行
@sample

こんな感じで実装したら出来ました。

まとめ

Blade拡張を使った例がドキュメントのような例しかなく、関数やforeach、if文などを使いたいときにどうすればいいのか分からず悩んだので忘れないように記事にしてみました。
上記のような形で実装できたけど、これが正しいやり方なのかはわからないので、何かご指摘があればコメントしていただけると嬉しいです。
以上、Qiita初投稿でした。

4
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3