2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

あまり知られていないLaravelのコレクションメソッド #1: macro

Last updated at Posted at 2024-06-13

目次

  1. あまり知られていないLaravelのコレクションメソッド #1: macro (本記事)
  2. あまり知られていないLaravelのコレクションメソッド #2: concat

背景

Laravelのコレクション、使いこなしていますか?

以下の記事を先程読んで面白いと思いました。

「あなたは使ったことがないLaravelのコレクションメソッド10選」

ただし、英語で書かれていますし、各メソッドの説明が不十分に感じました。
ということで、以上の記事を翻訳する上で、それぞれのメソッドの活用方法を説明していきたいです!
今回はCollectionのmacroメソッドを解説します!

macro: 全てのコレクションにカスタムメソッドを追加する

概要

スタティックメソッドになり、以下のように呼び出すことができます。

Collection::macro('カスタムメソッド', function ($arg1, $arg2) {
    // カスタムメソッド処理
});

定義したカスタムメソッドはどのコレクションでも使えます!

collect([1, 2])->カスタムメソッド(1, 'abc'); // 日本語のメソッド名はあり!!

実用性が意外と高いです。例えば、コレクション内の文字列を大文字に変換するには↓

Collection::macro('toUpper', function () {
    return $this->map(fn ($value) => Str::upper($value));
});

collect(['abc', 'def'])->toUpper();
// ['ABC', 'DEF']

全角半角変換も簡単にできます!

Collection::macro('toZenkaku', function () {
    return $this->map(fn ($value) => mb_convert_kana('ask'));
});
Collection::macro('toHankaku', function () {
    return $this->map(fn ($value) => mb_convert_kana('ask'));
});

collect(['811', 'John', '-'])->toZenkaku();
// ['811', 'John', '-']
collect(['811', 'John', '-'])->toHankaku();
// ['811', 'John', '-']

カスタムメソッドの定義はどこに置くの?

公式ドキュメント曰く、

Typically, you should declare collection macros in the boot method of a service provider.

通常、コレクションマクロはサービスプロバイダのbootメソッドで宣言する必要があります。

ということで、AppServiceProviderに置きましょう。

app/Providers/AppServiceProvider.php
class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        Collection::macro('カスタムメソッド', function ($arg1, $arg2) {
            // カスタムメソッド処理
        });
        // ...
    }
}

参考

まとめ

いかがでしたか?
今度はconcatメソッドなど、あまり知られていないLaravelのコレクションメソッドをさらに解説していきたいです。
ではまた!

2
0
0

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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?