Laravelには便利なヘルパ関数が多数用意されています。
自分がよく使うものを備忘録も兼ねてまとめておきたいと思います。
この記事を書いている時点で最新のLTSである、Laravel 6.xをベースに書いていきます。
dump()
dd()
こいつらは備忘録に載せる必要もないぐらい開発中何度もお世話になります。
<?php
dump($params);
上記のように渡してあげると画面にダンプとして吐いてくれます。
<?php
dd($param1, $param2);
引数は可変なので、いくつ渡してもOK。
dd()
使用時はダンプ直後にスクリプトの実行を停止してくれます。
https://readouble.com/laravel/6.x/ja/helpers.html#method-dump
https://readouble.com/laravel/6.x/ja/helpers.html#method-dd
logger()
logger()
はその名の通りログ出力をしてくれます。ログレベルはdebugになります。
<?php
logger(['foo', 'bar', 'baz']);
// local.DEBUG: array(
// 0 => 'foo',
// 1 => 'bar',
// 2 => 'baz',
// )
/config/logging.php
の設定に基づいてログに出力します。
デフォルトではファイルに出力されるので、 /storage/logs/laravel.log
を確認してみましょう。
より高度に使用する場合は、引数を渡さずに呼んでロガーインスタンスを生成します。
<?php
// logger() を引数無しで呼ぶとロガーインスタンスが返ってくる
logger()->channel('stack')->error('Some error occurred.');
// Logファサードを使用しても同等の処理が記述できる
Log::channel('stack')->error('Some error occurred.');
// local.ERROR: Some error occurred.
これによってログチャンネルやログレベルを指定することが出来るようになります。
https://readouble.com/laravel/6.x/ja/helpers.html#method-logger
ロガーは設定によって一部のログだけslackに通知させるようにしたり出来るので、一度ドキュメントを読んでみると面白いです。
https://readouble.com/laravel/6.x/ja/logging.html
env()
環境変数を使用する局面は少なくないと思います。
env()
はピュアPHPの getenv()
と違ってデフォルト値を設定できます。
// environment variables
APP_NAME=Laravel
<?php
echo env('APP_NAME');
// Laravel
echo env('TEMP_ENV', 'default value');
// default value
Arr::get()
data_get()
配列操作系のヘルパはたくさんあるのですが、僕はこれが一番使用頻度が高いです。
Arr::get()
と data_get()
は、ほぼ同様の動作をするため説明は Arr::get()
で書いていき、このセクションの最後に両者の違いを書こうと思います。
<?php
$array = [
'foo' => 'Apple',
'bar' => [
'baz' => [
'qux' => 'Orange',
],
],
];
上記のような配列があったとして、
<?php
echo $array['qux'];
// Undefined index: qux
このようにアクセスしようとすると、ルートにキー qux
は存在しないので当然怒られます。
こんな時に Arr::get()
を使用すると、存在しない場合は null
を返すようになります。また、存在しない場合のデフォルト値を渡すことも可能です。
<?php
echo Arr::get($array, 'qux');
// null
echo Arr::get($array, 'qux', 'Banana');
// Banana
これだけであればphp7.0で追加されたNULL合体演算子を使用して同じようなことが出来ます。
<?php
echo $array['qux'] ?? 'Banana';
// Banana
Arr::get()
を使用する利点はもう一つあり、それはネストしたキーにもドット記法でアクセスすることが出来る点です。
<?php
echo Arr::get($array, 'bar.baz.qux');
// Oragnge
echo Arr::get($array, 'bar.baz.quux', 'Banana');
// Banana
ドット記法でのアクセスはLaravelではよく使用されており、他の配列操作系ヘルパでも使用しますしセッションデータの操作などでも使用することになります。
もちろん後の例のように、ネストしたキーにアクセスしながらデフォルト値を設定することも出来ます。
Arr::get()
と data_get()
の違いdata_get()
には1つ追加で機能が備わっています。それがワイルドカードでの取得です。
<?php
$array = [
'apple' => [
'price' => 100,
],
'orange' => [
'price' => 150,
],
];
// *(ワイルドカード)で取得
dump(data_get($array, '*.price'));
// array:2 [▼
// 0 => 100
// 1 => 150
// ]
上記のように、ネストした "price" が2件返ってきます。
使い所が難しくて有用な使い方を出来たことがありませんが…一応書いておきます。
https://readouble.com/laravel/6.x/ja/helpers.html#method-array-get
https://readouble.com/laravel/6.x/ja/helpers.html#method-data-get
collect()
配列操作系2連発ですが collect()
は直接配列を操作するヘルパではなく、
配列を扱いやすくしてくれる Collection
インスンタンスを返してくれるヘルパです。
ここからはヘルパの説明というよりコレクションの説明になってしまいますが、
配列を直接操作せずコレクションを使用する利点として挙げられるのは、メソッドをチェーンして使用できる点です。
また、コレクションのメソッドはすべて新しいコレクションを返すため、元の配列やコレクションを変更せずに済みます。
<?php
// 元となる配列
$array = [
['name' => 'foo', 'class' => 'A'],
['name' => 'bar', 'class' => 'A'],
['name' => 'baz', 'class' => 'B'],
['name' => 'qux', 'class' => 'B'],
];
// Collection インスタンス作成
$collection = collect($array);
// class = 'A' のみにフィルタし、name でソートする
dump($collection->where('class', 'A')->sortBy('name'));
// Illuminate\Support\Collection {#275 ▼
// #items: array:2 [▼
// 1 => array:2 [▼
// "name" => "bar"
// "class" => "A"
// ]
// 0 => array:2 [▼
// "name" => "foo"
// "class" => "A"
// ]
// ]
// }
https://readouble.com/laravel/6.x/ja/helpers.html#method-collect
https://readouble.com/laravel/6.x/ja/collections.html
abort()
これはよく忘れるので備忘録です。
abort()
が HTTPException
インスタンスを返し、自動的に画面描画されます。
<?php
abort(403);
"Forbidden" の部分を書き換えたい場合、第2引数に渡せばそのメッセージを表示してくれます。
<?php
abort(403, 'Not admin.');
abort()
の親戚に abortif()
abortunless()
があります。
https://readouble.com/laravel/6.x/ja/helpers.html#method-abort
結構長くなってしまったので一旦このぐらいにしておきます。
また思いついたら別の記事かこの記事に追記しようと思います。