Laravelのよく使うヘルパー関数7選!

さて、【Laravel5.6】インストール直後にやること3点などここの所Laravelの話題が多くなってるわけですけど、そんな中、ふと以下の記事を発見しました。

5 Laravel Helpers to Make Your Life Easier

意訳すると、「開発が楽〜になっちゃう、Laravelのヘルパー関数5つ

って感じでしょうか。

ただ、この記事を読んでんですけど、正直な所「んー、それは微妙かな・・・」って思うものも入ってたんで、じゃあ今度は僕自身が、

Laravelのヘルパー関数で「実際よく使ってるもの」

をまとめてみることにしました。
よかったら、みなさんと比べながら読んでみてくださいね。

1.auth()

auth() はホントによく使うようになりました。
以下のようにログインユーザーを取得することもできますし、

$user = auth()->user();

ログインチェックも以下のようにできます。

if(auth()->check()) {

    // ログイン済み

}

あとは、こんなカンジでIDを使ってログインさせることもできますし、

auth()->loginUsingId(1)

Bladeの中で、

{{ auth()->user()->name }}

なんていう風にログイン中のユーザー名を取得したりします。
多分、この形だとデザイナーさんが見ても分かりやすいと思うんですよね。(最近はVue化することも多いですけど)

ただし、$requestがある場合(コントローラー内とか)だと、

$request->user();

とすることも多いです。

2.env(), config()

どちらも特定ファイルの中からデータを読みだすものなので、2つ一緒にしました。

まずひとつめは、.envの中に書かれてある文字列を取得するのに使います。
例えば、.env

APP_NAME=Laravel

と書かれていたら、以下のようにして文字列を取得することができます。

echo env('APP_NAME');

※ただし、.envの場合は配列を指定できないので、文字列のみになります。無理やりjson文字列を使って対処する方法もあるらしいのですが、あまりスマートじゃないと思うので今回はパス。

で、次にconfig()。これもenv()とほぼ同じなんですけど、呼び出しにconfigフォルダ内のファイル名が関わってきます。

例えば、config/app.phpに以下のように記述すると・・・・・・

<?php

return [
 /***  長いので省略  ***/
 'xxx' => 'yyy'
];

データの取得は以下のようになります。

echo config('app.xxx'); // yyy

つまり、ファイル名とキーをドットでつなぐことでデータを取得することができるわけですね。

そして、.env()とのもうひとつの違いは、配列に対応してるということ。
もしさっきの記述が、以下のように配列だったら・・・・・・

<?php

return [
 /***  長いので省略  ***/
  'xxx' => [
    'yyy_1' => 'zzz_1',
    'yyy_2' => 'zzz_2',
    'yyy_3' => 'zzz_3'
  ]
];

データの取得は代わりませんけど、中身は配列として返ってきます。

$array = config('app.xxx'); // 配列

そして、さらにドットをつなぐことで配列の中身を取得することもできます。

echo config('app.key.xxx.yyy_1'); // zzz_1

3.collect()

この関数は配列をコレクションに変換してくれるんですけど、使い方によってはなかなか便利なんで紹介します。

例えば、次のような配列があったとします。(特にjsonからデータ取得したときなんかですね)

$products = [
    [
        'id' => 1,
        'name' => 'xxx'
    ],
    [
        'id' => 2,
        'name' => 'yyy'
    ],
    [
        'id' => 3,
        'name' => 'zzz'
    ],
];

この場合に、

IDが3の名前(name)を取得したいってなったら、どうでしょう。
foreach() とかのループだとちょっと書くのが面倒だったりしますよね。

そこで、以下のようにcollect()を使ってコレクションの便利機能で簡単に実現可能です。

$product = collect($products)->firstWhere('id', 3);
echo $product['name']; // zzz

コレクションの関数はには他にもたくさんあるのでぜひ本家のサイトで確認してみてください。

firstWhere()はLaravel5.5以降で有効です。それ以前のバージョンはfirst()で対応してください。

4.starts_with(), ends_with()

意外と、あって嬉しいのがこの2つです。特定の文字列で始まってるか、終わってるかをチェックすることができる関数なんですけど、これってもともとPHPに標準関数としていれといてよー。と思うレベルなのに、なんでないのかな??他にもっといらない・・・いや、使用頻度が低い関数なんて山ほどあるのに(笑)

使い方はこんなカンジです。
マルチバイト文字にも対応してるのが嬉しいですね。

$str = 'お腹いっぱいで幸せ';

if(starts_with($str, 'お腹')) {

    echo '「お腹」から始まる文字列です';

}

if(ends_with($str, '幸せ')) {

    echo '「幸せ」で終わる文字列です';

}

5.trans()

この関数は便利というか、Laravelで多言語対応するなら必須と言っていい関数ですね。

使い方はほぼconfig()と同じで、

/lang/xx/auth.php内に(xxはロケール文字列。例:ja, en)

<?php

return [
    'complete' => 'ログイン成功!',
];

と書いてあれば、

echo trans('auth.complete');

とすれば、自動で対応言語の文字列を呼び出すことができます。

また、文字列の一部を可変にすることもできて、

<?php

return [
    'complete' => 'ログインに :count 回成功!',
];

と翻訳ファイルに書いておいて、

echo trans('auth.complete', ['count' => 3]);

とすれば、「ログインに 3 回成功!」と表示することもできます。

※ちなみに、Bladeの内部だと、代わりに@langを使っています。

6.array_get()

array_get()は、配列の中からデータを取得する時に使うヘルパー関数なんですけど、なぜ通常通りに、

$array['key_1']['key_2'];

という形にしないかと言うと、

  1. デフォルト値を設定できる
  2. コードを書きやすい

の2点につきます。

では、実際の使い方です。

$array = [
    'japan' => [
        'tokyo' => [
            'kanji' => '東京'
        ],
        'kyoto' => [
            'kanji' => '京都'
        ]
    ]
];
echo array_get($array, 'japan.tokyo.kanji'); // 東京

array_get() も「ドットつなぎ」で配列の深いところまで呼び出すことができるんで、よりシンプルに書くことができます。

そして、デフォルト値があるバージョン。

echo array_get($array, 'japan.osaka.kanji', 'なし'); // なし

PHP 7から以下のように「Null 合体演算子」も使えますけど、個人的にarray_get()の方がより書きやすいと思っています。

echo $array['japan']['kyoto']['kanji'] ?? 'なし';

7.response()

これも必須といえば必須なんですけど、昔は

return \Response::json([])

とかって書いていて面倒だったので今回の7選に加えました。

return response()->json([
    'xxx' => 'yyy'
]);

とすれば、

{"xxx":"yyy"}

と、jsonで返してくれるし、

$headers = ['Content-Type' => 'test/test'];
return response('Hello World', 200, $headers);

とすれば、HTTPステータスコードとヘッダーも簡単に設定できます。

おわりに

その他にも次点で結構使うことが多いヘルパー関数があるんで、まとめました。

  • str_contains() ・・・ 文字列に特定の文字が入ってるかをチェック
  • str_limit() ・・・ mb_strimwidth() を簡略化したもの。文字を詰めてくれる。
  • route() ・・・ ルート名を指定するとURLを作成してくれる。
  • url() ・・・ URLを作成。
  • path() ・・・ 例えば public_path() とか。pathを返してくれるんで、これも重宝します。
  • app() ・・・ とくにロケールを取得するときなどに使ってます。

あと、今回「こんなのがあったんだ!」というものを発見したんでメモ。

  • now()
  • today()

Carbonのインスタンス名を返してくれるヘルパー関数です。
今まで new Carbon()とか、Carbon::parse()って書いてましたけど、これからはこの2つをゴリゴリ使っていこうと思います!

Laravelはバージョンアップごとにヘルパー関数も増やしていってるんで、みなさんもぜひチェックしてみてくださいね。

ではでは〜。