
九保すこひです(フリーランスのITコンサルタント、エンジニア)
さてさて、この間「Laravel 5.6のartisanコマンドまとめ」という記事を公開しましたが、Laravel
は開発のスピードが早いので、気がつくと「え、こんな便利なものが!?」となることも珍しくなかったりします。
そこで!
今回はそんな「知らないけど便利な」テクニックを習得しておくために、Laravel
が提供する「ヘルパー関数」をまとめてみることにしました。
中にはPHPの標準関数として採用してほしいぐらい便利なものもあるので、ぜひみなさんも参考にしてくださいね。
ではひとつずつ見ていきましょう
【追記:2019/04/10】Laravel 5.8
以降では、ヘルパー関数の書き方が変更になっていますのでご注意ください。
// 古い書き方
array_add();
Str::random();
// 新しい書き方
use Illuminate\Support\Arr;
Arr::add();
use Illuminate\Support\Str;
Str::random();
つまり、通常の関数ではなくクラスのstatic function
として実行するようになりました。
ただ、こうなってしまうと新しいLaravel
をインストールした場合は問題ないですが、単にバージョンを上げたいときにエラーが発生してしまうことになります。そのため、Laravel 5.8
以降でも使えるようにパッケージが用意されています。
もし、昔のままのヘルパー関数を使いたい場合は以下のcomposer
コマンドでパッケージをインストールするといいでしょう!
composer require laravel/helpers
「使い始めると、もう手放せません」
開発環境: Laravel 5.8
〜 7.x
【追記:2020.3.27】この記事は元々Laravel 5.8
向けに公開された記事に加筆修正をしたものです。そのため、バージョン情報が書いていないものはLaravel 5.8
以降全てで有効です。
目次 [非表示]
- 1 配列
- 1.1 Arr::accessible()で配列としてアクセスできるかチェックする
- 1.2 Arr::add()で配列に新しい値を追加する
- 1.3 Arr::collapse()で多重配列を1次元配列にならす
- 1.4 Arr::crossJoin()で全ての組み合わせを取得する
- 1.5 Arr::divide()で配列をキーと値にする
- 1.6 Arr::dot()で「ドットつなぎ」をキーとする配列にする
- 1.7 Arr::except()で指定したキー「以外」のデータを取得する
- 1.8 Arr::exists()でキーが存在するかチェックする
- 1.9 Arr::first()である条件を最初に満たすデータを取得する
- 1.10 Arr::last()である条件を最初に満たすデータを取得する
- 1.11 Arr::flatten()で連想配列を1次元配列にならす
- 1.12 Arr::forget()で値を削除する
- 1.13 Arr::pull()で値を削除する
- 1.14 Arr::get()で特定のデータを取得する
- 1.15 Arr::has()でキーを指定してデータの存在チェックをする
- 1.16 Arr::hasAny()でいずれかのキーが存在しているかチェックする
- 1.17 Arr::isAssoc()で連想配列かどうかチェックする
- 1.18 Arr::only()でキーを指定してデータ取得する
- 1.19 Arr::pluck()で該当する全データを取得する
- 1.20 Arr::prepend()で配列の先頭にデータ追加する
- 1.21 Arr::query()でURLのパラメータ文字列をつくる
- 1.22 Arr::random()でランダムに値を取得する
- 1.23 Arr::set()で値をセットする
- 1.24 Arr::shuffle()で配列をランダムに並べ替える
- 1.25 Arr::sort()で並べ替える
- 1.26 Arr::sortRecursive()で再帰的にデータを並べ替え
- 1.27 Arr::where()である条件を満たすデータだけを取得する
- 1.28 Arr::wrap()で配列をつくる
- 1.29 data_fill()で新しいデータを追加する
- 1.30 data_get()で指定のデータを取得する
- 1.31 data_set()で値をセットする
- 1.32 head()で配列の最初の値を取得する
- 1.33 last()で配列の最後の値を取得する
- 2 パス
- 2.1 app_path()で「app」フォルダを基準とするパスを取得する
- 2.2 base_path()でアプリケーションのトップパスを基準とするパスを取得する
- 2.3 config_path()で「config」フォルダを基準としたパスを取得する
- 2.4 database_path()で「database」フォルダを基準としたパスを取得する
- 2.5 mix()でバージョン情報の入ったパスを取得する
- 2.6 public_path()で「public」フォルダを基準としたパスを取得する
- 2.7 resource_path()で「reources」フォルダを基準としたパスを取得する
- 2.8 storage_path()で「storage」フォルダを基準としたパスを取得する
- 3 URL
- 4 文字列
- 4.1 class_basename()でネームスペースを除去した文字列を取得する
- 4.2 e()で特殊文字をエスケープする
- 4.3 Str::replaceArray()で文字列置換を一気に行う
- 4.4 Str::replaceFirst()で最初に登場する文字列を入れ替える
- 4.5 Str::replaceLast()で最後に登場する文字列を入れ替える
- 4.6 Str::replace_first()で最初の文字だけを置換する
- 4.7 Str::replace_last()で最初の文字だけを置換する
- 4.8 preg_replace_array()で正規表現を使った文字列置換を一気に行う
- 4.9 Str::before()で指定した文字より前の文字列を取得する
- 4.10 Str::after()で指定した文字より後の文字列を取得する
- 4.11 Str::start()で指定した文字で始まるテキストを取得する
- 4.12 Str::finish()で指定した文字で終わるテキストを取得する
- 4.13 Str::afterLast()である文字列が最後に出現する「以降」の文字列を取得する
- 4.14 Str::beforeLast()である文字列が最後に出現する「以前」の文字列を取得する
- 4.15 Str::between()で2つの文字列の間にある部分を取得する
- 4.16 Str::limit()で指定した文字列で切り詰めたテキストを取得する
- 4.17 Str::length()で文字数を取得する
- 4.18 Str::plural()で複数形のテキストを取得する
- 4.19 Str::singular()で単数形のテキストを取得する
- 4.20 Str::substr()で文字列を切り出す
- 4.21 Str::random()でランダムな文字列を取得する
- 4.22 Str::lower()で小文字を取得する
- 4.23 Str::upper()で大文字を取得する
- 4.24 Str::words()で文字列を切り詰める
- 5 文字列チェック
- 5.1 Str::startsWith()で指定した文字で始まるかチェックする
- 5.2 Str::endsWith()で指定した文字で終わるかチェックする
- 5.3 Str::contains()で特定の文字列が含まれているかチェックする
- 5.4 Str::containsAll()で特定の文字列が全て含まれているかチェックする
- 5.5 Str::is()でワイルドカードを使ってマッチするかチェックする
- 5.6 Str::isAscii()でアスキー文字かどうかチェックする
- 5.7 Str::isUuid()でUUIDかどうかチェックする
- 5.8 blank()で内容が空かどうかをチェックする
- 5.9 filled()で内容が空ではないかどうかをチェックする
- 6 ケース文字列
- 7 翻訳テキスト
- 8 例外処理
- 9 暗号/復号
- 10 その他
- 10.1 app()でサービスコンテナを取得する
- 10.2 auth()で認証インスタンスを取得する
- 10.3 back()で元ページに戻る
- 10.4 bcrypt()でハッシュ値を取得する
- 10.5 broadcast()でイベントを実行する
- 10.6 cache()でキャッシュを操作する
- 10.7 class_uses_recursive()で利用されているtraitを取得する
- 10.8 trait_uses_recursive()で利用されているtraitを取得する
- 10.9 collect()でコレクションを作成する
- 10.10 config()で設定情報を取得する
- 10.11 cookie()でクッキー・インスタンスを取得する
- 10.12 クッキーの書き込み
- 10.13 session()でセッションを管理する
- 10.14 csrf_field()でクロスサイト・リクエスト・フォージェリ用のhiddenインプット・タグを作成する
- 10.15 csrf_token()でクロスサイト・リクエスト・フォージェリ用トークンを取得する
- 10.16 dispatch()でキューを発行する
- 10.17 dispatch_now()で即時キューを発行する
- 10.18 env()で環境変数を取得する
- 10.19 event()でイベントを実行する
- 10.20 factory()でファクトリービルダーを取得する
- 10.21 method_field()でHTTPメソッド用のhiddenインプットタグを取得する
- 10.22 now()で現在時間のCarbonインスタンスを取得する
- 10.23 today()で今日のCarbonインスタンスを取得する
- 10.24 old()で入力済みのデータを取得する
- 10.25 optional()でエラーを発生させないコードにする
- 10.26 policy()でPolicyインスタンスを取得する
- 10.27 redirect()でリダイレクトする
- 10.28 request()でフォーム・リクエストを取得する
- 10.29 resolve()でインスタンスを取得する
- 10.30 response()でレスポンス・インスタンスを取得する
- 10.31 retry()で指定回数の処理を繰り返す
- 10.32 tap()で無名関数を実行して引数を取得する
- 10.33 transform()でデータを加工する
- 10.34 validator()でバリデーション・インスタンスを取得する
- 10.35 value()で値を取得する
- 10.36 view()でビューを取得する
- 10.37 with()で値を取得する
- 11 開発テスト
- 12 おわりに
配列
Arr::accessible()で配列としてアクセスできるかチェックする
配列としてアクセスできるかどうかをチェックします。(つまり$value['id']
ようにして値を取得できるかどうかです)
// 通常の配列
Arr::accessible(['山田太郎', '佐藤次郎', '田中三郎']); // true
// コレクション
$collection = new Collection(['id' => 1, 'name' => '山田太郎']);
Arr::accessible($collection); // true
// インスタンス
Arr::accessible(new Carbon()); // false
// 文字列
Arr::accessible('山田太郎'); // false
Laravel 7.x
以降
Arr::add()で配列に新しい値を追加する
配列に新しい値を追加します。
$user = [
'id' => 1,
'name' => '鈴木'
];
$array = Arr::add($user, 'age', 25);
これを実行すると以下のようになります。
Array
(
[id] => 1
[name] => 鈴木
[age] => 25
)
ちなみにPHP
で配列に新しい値を追加するには、
$user['age'] = 25;
としますが、この関数との違いはすでにキーが存在する場合は無視されるという部分です。つまり、以下の場合だと「age」は25ではなく30のままです。
$user = [
'id' => 1,
'name' => '鈴木',
'age' => 30 //
変更されない
];
$array = Arr::add($user, 'age', 25);
Arr::collapse()で多重配列を1次元配列にならす
$users = [
['鈴木', '佐藤'],
['田中', '山本'],
['藤原']
];
print_r(Arr::collapse($users));
これを実行すると以下のようになります。
Array
(
[0] => 鈴木
[1] => 佐藤
[2] => 田中
[3] => 山本
[4] => 藤原
)
Arr::crossJoin()で全ての組み合わせを取得する
例えば、食べ物と飲み物の組み合わせすべてを取得する場合です。
$foods = ['ラーメン', 'カレーライス', 'お好み焼き'];
$drinks = ['コーラ', 'お茶', 'コーヒー'];
$array = Arr::crossJoin($foods, $drinks);
print_r($array);
実行結果はこうなります。
Array
(
[0] => Array
(
[0] => ラーメン
[1] => コーラ
)
[1] => Array
(
[0] => ラーメン
[1] => お茶
)
[2] => Array
(
[0] => ラーメン
[1] => コーヒー
)
// 長いので省略
)
なお、指定できる配列はいくつでも追加できます。
Laravel 6.x
以降
Arr::divide()で配列をキーと値にする
$user = [
'id' => 1,
'name' => '鈴木',
'age' => 23
];
[$keys, $values] = Arr::divide($user);
print_r($keys);
print_r($values);
これを実行すると以下のようになります。上の配列がキーで下が値です。
Array
(
[0] => id
[1] => name
[2] => age
)
Array
(
[0] => 1
[1] => 鈴木
[2] => 23
)
Arr::dot()で「ドットつなぎ」をキーとする配列にする
例えば、以下のようなスマホ・データを1次元配列に変換する場合です。
$phone = [
'smartphone' => [
'iPhone' => [
'x' => 10,
'ix' => 9,
'xiii' => 8
]
]
];
print_r(Arr::dot($phone));
実行結果はこうなります。見ての通り、階層が深くなるにつれてドットでキーを繋いでいきます。
Array
(
[smartphone.iPhone.x] => 10
[smartphone.iPhone.ix] => 9
[smartphone.iPhone.xiii] => 8
)
Arr::except()で指定したキー「以外」のデータを取得する
例えば、あるユーザーデータの「age」「job」以外のデータを取得する場合です。
$user = [
'id' => 1,
'name' => '鈴木',
'age' => 23,
'job' => 'student'
];
$new_array = Arr::except($user, ['age', 'job']);
print_r($new_array);
これを実行すると以下のように「id」と「name」だけの配列になります。
Array
(
[id] => 1
[name] => 鈴木
)
Arr::exists()でキーが存在するかチェックする
$user = ['id' => 1, 'name' => '山田太郎'];
Arr::exists($user, 'id'); // true
Arr::exists($user, 'age'); // false
なお、より深い階層のチェックをする場合は、Arr::has()を使ってください。
Laravel 7.x
以降
Arr::first()である条件を最初に満たすデータを取得する
例えば、テストが80点以上だった「最初の」点数を取得する場合です。
$scores = [
73,
45,
82, //
80点以上
95, //
80点以上
21
];
echo Arr::first($scores, function($value, $key){
return ($value >= 80); // 80点以上
});
実行結果は「82」となります。
ちなみに、function(){ ... }
の引数が、
- $value
- $key
となっているのも気をつけたいところです。
また、第3引数を設定しておくと、どれも該当しない場合のデフォルト値にすることができます。
$scores = [
73,
45,
55,
59,
21
];
echo Arr::first($scores, function($value, $key){
return ($value > 80);
}, -100); //
ここ
つまり、これは「-100」となります。
Arr::last()である条件を最初に満たすデータを取得する
Arr::first()
の逆で最後に該当するデータを取得するヘルパー関数です。
使い方は同じなのでArr::first()を参照してください。
Arr::flatten()で連想配列を1次元配列にならす
$user = [
'id' => 1,
'name' => '鈴木',
'hobbies' => [
'ピアノ',
'登山',
'音楽鑑賞'
]
];
print_r(Arr::flatten($user));
実行結果はこうなります。
Array
(
[0] => 1
[1] => 鈴木
[2] => ピアノ
[3] => 登山
[4] => 音楽鑑賞
)
Arr::forget()で値を削除する
例えば、あるユーザーの趣味データを削除する場合です。
$user = [
'id' => 1,
'name' => '鈴木',
'hobbies' => [
'inside' => ['ピアノ', '音楽鑑賞'],
'outside' => ['登山']
]
];
Arr::forget($user, 'hobbies');
print_r($user);
実行結果はこうなります。
Array
(
[id] => 1
[name] => 鈴木
)
また、配列の深い階層だけを削除する場合はドットで繋いだキーを使います。上の例を使って、室内の趣味だけを削除してみましょう。
Arr::forget($user, 'hobbies.inside');
結果はこうです。
Array
(
[id] => 1
[name] => 鈴木
[hobbies] => Array
(
[outside] => Array
(
[0] => 登山
)
)
)
Arr::pull()で値を削除する
Arr::forget()とほぼ同じですが、Arr::pull()
は削除されたデータの取得ができるのが特徴です。
$user = [
'id' => 1,
'name' => '鈴木',
'hobbies' => [
'inside' => ['ピアノ', '音楽鑑賞'],
'outside' => ['登山']
]
];
$removed = Arr::pull($user, 'hobbies.inside');
print_r($user);
print_r($removed);
実行結果はこうなります。
// 配列の内容
Array
(
[id] => 1
[name] => 鈴木
[hobbies] => Array
(
[outside] => Array
(
[0] => 登山
)
)
)
// 削除された内容
Array
(
[0] => ピアノ
[1] => 音楽鑑賞
)
Arr::get()で特定のデータを取得する
例えば、あるユーザーの趣味データを取得する場合です。
$user = [
'id' => 1,
'name' => '鈴木',
'hobbies' => [
'inside' => ['ピアノ', '音楽鑑賞'],
'outside' => ['登山']
]
];
print_r(Arr::get($user, 'hobbies'));
これを実行すると、以下のようになります。
Array
(
[inside] => Array
(
[0] => ピアノ
[1] => 音楽鑑賞
)
[outside] => Array
(
[0] => 登山
)
)
また、深い階層はドットつなぎで指定することができます。
Arr::get($user, 'hobbies.inside')
さらに、データが見つからない場合のためのデフォルト値は第3引数で指定します。
Arr::get($user, 'hobbies.others', ['なし']);
Arr::has()でキーを指定してデータの存在チェックをする
例えば、あるユーザーデータに「name」が含まれているかをチェックする場合です。
$user = [
'id' => 1,
'name' => '鈴木',
'hobbies' => [
'inside' => ['ピアノ', '音楽鑑賞'],
'outside' => ['登山']
]
];
if(Arr::has($user, 'name')) {
echo '「name」があります';
}
また、階層が深いデータはドットつなぎで指定することもできます。
if(Arr::has($user, 'hobbies.inside')) {
echo '[hobbies][inside] があります';
}
さらに、キーを配列で指定することで一気に複数データが存在しているかをチェックすることもできます。
if(Arr::has($user, ['id', 'name'])) {
echo '「id」も「name」もあります';
}
Arr::hasAny()でいずれかのキーが存在しているかチェックする
Arr::has() は全てのキーが存在しているとtrue
になりますが、Arr::hasAny()
は1つでも入っていればtrue
になります。
例をみてみましょう。
次の例は、キー「hobbies.inside」が存在しているのでtrue
になります。
$user = [
'id' => 1,
'name' => '鈴木',
'hobbies' => [
'inside' => ['ピアノ', '音楽鑑賞'],
'outside' => ['登山']
]
];
if(Arr::hasAny($user, ['hobbies.inside', 'age'])) {
echo 'キーがどれか存在しています'; //
表示されます
}
逆に次の例はキーが全く存在していないので、false
になります。
$user = [
'id' => 1,
'name' => '鈴木',
'hobbies' => [
'inside' => ['ピアノ', '音楽鑑賞'],
'outside' => ['登山']
]
];
if(Arr::hasAny($user, ['address.city', 'age'])) {
echo 'キーがどれか存在しています'; //
表示されません
}
Laravel 7.x
以降
Arr::isAssoc()で連想配列かどうかチェックする
Arr::isAssoc(['id' => 1, 'name' => '山田太郎']); // true
Arr::isAssoc(['山田太郎', '佐藤次郎', '田中三郎']); // false
Laravel 6.x
以降
Arr::only()でキーを指定してデータ取得する
例えば、あるユーザーデータから「id」と「name」だけを取得する場合です。
$user = [
'id' => 1,
'name' => '鈴木',
'hobbies' => [
'inside' => ['ピアノ', '音楽鑑賞'],
'outside' => ['登山']
]
];
print_r(Arr::only($user, ['id', 'name']));
実行結果はこうなります。
Array
(
[id] => 1
[name] => 鈴木
)
ちなみにキーは配列でなくても使えます。
Arr::only($user, 'id');
ただし、ドットつなぎで階層を深くする取得はできません。
//
これはうまくいきません。
Arr::only($user, ['hobbies.inside'])
Arr::pluck()で該当する全データを取得する
例えば、全ユーザーの「室内の趣味」を配列で取得する場合です。
$users = [
[
'id' => 3,
'hobbies' => [
'inside' => ['ピアノ', '音楽鑑賞'],
'outside' => ['登山']
]
],
[
'id' => 6,
'hobbies' => [
'inside' => [],
'outside' => ['サッカー', 'BBQ']
]
],
[
'id' => 12,
'hobbies' => [
'inside' => ['映画'],
'outside' => ['野球']
]
]
];
print_r(Arr::pluck($users, 'hobbies.inside'));
これを実行すると以下のようになります。
Array
(
[0] => Array
(
[0] => ピアノ
[1] => 音楽鑑賞
)
[1] => Array
(
)
[2] => Array
(
[0] => 映画
)
)
また、キーを「id」として取得することもできます。(キーがドットつなぎになってもOKです)
Arr::pluck($users, 'hobbies.inside', 'id');
すると結果は以下のようになります。
Array
(
[3] => Array
(
[0] => ピアノ
[1] => 音楽鑑賞
)
[6] => Array
(
)
[12] => Array
(
[0] => 映画
)
)
Arr::prepend()で配列の先頭にデータ追加する
例えば、「山本」さんを先頭に追加する場合です。
$names = ['鈴木', '佐藤', '田中'];
print_r(Arr::prepend($names, '山本'));
結果はこうなります。
Array
(
[0] => 山本
ここ
[1] => 鈴木
[2] => 佐藤
[3] => 田中
)
また、キーが必要な場合は第3引数に指定します。
$names = [
'suzuki' => '鈴木',
'sato' => '佐藤',
'tanaka' => '田中'
];
print_r(Arr::prepend($names, '山本', 'yamamoto'));
結果はこうです。
Array
(
[yamamoto] => 山本
ここ
[suzuki] => 鈴木
[sato] => 佐藤
[tanaka] => 田中
)
Arr::query()でURLのパラメータ文字列をつくる
$data = [
'q' => 'テスト',
'ids' => [1, 2, 3],
'hobbies' => [
'inside' => ['ピアノ']
]
];
echo Arr::query($data);
これを実行するとこうなります。
q=%E3%83%86%E3%82%B9%E3%83%88&ids%5B0%5D=1&ids%5B1%5D=2&ids%5B2%5D=3&hobbies%5Binside%5D%5B0%5D=%E3%83%94%E3%82%A2%E3%83%8E
Laravel 6.x
以降
Arr::random()でランダムに値を取得する
例えば、ランダムで名前を取得する場合です。
$names = ['鈴木', '佐藤', '田中', '山本'];
echo Arr::random($names); // ここはランダムな名前
※ちなみにArr::rand()
はPHPの標準関数でインデックス値を返します。似ているので間違えないようにしましょう。
また、第2引数に数字をいれると、その個数分のランダムな配列データを取得することもできます。
Arr::random($names, 2);
Arr::set()で値をセットする
配列に新しい値を追加する、もしくはすでにデータがある場合は上書きするヘルパー関数です。
例えば、まだ名前がわからないユーザーデータに名前データを追加する場合はこうなります。
$user = [
'id' => 1
];
Arr::set($user, 'name', '鈴木');
print_r($user);
これを実行すると以下のようになります。
Array
(
[id] => 1
[name] => 鈴木
)
また、すでにデータが存在する場合はデータが上書きされます。なお、例のようにドットつなぎで深い階層を指定することもできます。
$user = [
'id' => 1,
'hobbies' => [
'inside' => ['ピアノ', '音楽鑑賞'],
'outside' => ['登山']
]
];
Arr::set($user, 'hobbies.inside', ['読書']);
print_r($user);
実行結果はこうなります。
Array
(
[id] => 1
[hobbies] => Array
(
[inside] => Array
(
[0] => 読書
)
[outside] => Array
(
[0] => 登山
)
)
)
Arr::shuffle()で配列をランダムに並べ替える
$random_names = Arr::shuffle(['山田太郎', '佐藤次郎', '田中三郎']);
Laravel 6.x
以降
Arr::sort()で並べ替える
例えば、名前の読みがな順に並べ替えをする場合です。
$names = ['すずき', 'さとう', 'たなか', 'やまもと'];
$sorted = Arr::sort($names);
print_r($sorted);
実行結果はこうなります。
Array
(
[1] => さとう
[0] => すずき
[2] => たなか
[3] => やまもと
)
※キーが保持されていることに注意してください。
また、Arr::sort()
ではfunction(){ ... }
でより複雑な並べ替えもできるようになっています。以下は多重配列になっている複数ユーザーを読みがなで並べ替える例です。
$users = [
['name' => '鈴木', 'kana' => 'すずき'],
['name' => '佐藤', 'kana' => 'さとう'],
['name' => '田中', 'kana' => 'たなか'],
['name' => '山本', 'kana' => 'やまもと']
];
$sorted = Arr::sort($users, function($values){
return $values['kana']; // このデータを元に並べ替えられる
});
print_r($sorted);
実行結果はこうなります。
Array
(
[1] => Array
(
[name] => 佐藤
[kana] => さとう
)
[0] => Array
(
[name] => 鈴木
[kana] => すずき
)
[2] => Array
(
[name] => 田中
[kana] => たなか
)
[3] => Array
(
[name] => 山本
[kana] => やまもと
)
)
Arr::sortRecursive()で再帰的にデータを並べ替え
例えば、2グループの名前(かな)を一気に並べ替えする場合です。
$users = [
1 => ['すずき', 'さとう', 'たなか', 'やまもと'],
2 => ['たかはし', 'いとう', 'わたなべ']
];
$sorted = Arr::sortRecursive($users);
print_r($sorted);
これを実行すると以下のようになります。
Array
(
[1] => Array
(
[0] => さとう
[1] => すずき
[2] => たなか
[3] => やまもと
)
[2] => Array
(
[0] => いとう
[1] => たかはし
[2] => わたなべ
)
)
Arr::where()である条件を満たすデータだけを取得する
例えば、テストで80点以上の点数だけを取得する場合です。
$scores = [73, 45, 87, 95, 21];
$filtered = Arr::where($scores, function($value){
return ($value >= 80); // ここ条件を満たすものだけ取得
});
print_r($filtered);
実行結果はこうなります。
Array
(
[2] => 87
[3] => 95
)
Arr::wrap()で配列をつくる
例えば、文字列の名前を配列にしたい場合です。
$name = '鈴木';
$names = Arr::wrap($name);
print_r($names);
これを実行するとこうなります。
Array
(
[0] => 鈴木
)
ちなみに、元から値が配列になっている場合は変化なしです。
Arr::wrap(['鈴木']);
また、値が「null」の場合は空の配列が返ってきます。
Arr::wrap(null);
(実行結果)
Array
(
)
data_fill()で新しいデータを追加する
例えば、野外の趣味が登録されていないユーザーに新しく「登山」を追加する場合です。
$user = [
'id' => 1,
'hobbies' => [
'inside' => ['ピアノ', '音楽鑑賞']
]
];
data_fill($user, 'hobbies.outside', ['登山']);
print_r($user);
これを実行するとこうなります。
Array
(
[id] => 1
[hobbies] => Array
(
[inside] => Array
(
[0] => ピアノ
[1] => 音楽鑑賞
)
[outside] => Array
(
[0] => 登山
)
)
)
ただし、注意が必要なのはすでに存在しているデータは無視されるということです。
実際の例で見てみましょう。
以下の例だと、すでに「BBQ」というデータが存在しているので「登山」の追加は無視されます。
$user = [
'id' => 1,
'hobbies' => [
'inside' => ['ピアノ', '音楽鑑賞'],
'outside' => ['BBQ']
]
];
data_fill($user, 'hobbies.outside', ['登山']);
print_r($user);
結果はこうなります。
Array
(
[id] => 1
[hobbies] => Array
(
[inside] => Array
(
[0] => ピアノ
[1] => 音楽鑑賞
)
[outside] => Array
(
[0] => BBQ
)
)
)
また、「*」アスタリスクをワイルドカードにして一気にデータ追加することもできます。
$user = [
'id' => 1,
'hobbies' => [
['name' => 'ピアノ'],
['name' => '読書'],
['name' => '絵画']
]
];
data_fill($user, 'hobbies.*.type', '室内');
print_r($user);
結果はこうなります。
Array
(
[id] => 1
[hobbies] => Array
(
[0] => Array
(
[name] => ピアノ
[type] => 室内
)
[1] => Array
(
[name] => 読書
[type] => 室内
)
[2] => Array
(
[name] => 絵画
[type] => 室内
)
)
)
data_get()で指定のデータを取得する
Arr::get()
と同様です。
使い方はArr::get()をご覧ください。
data_set()で値をセットする
Arr::set()
と同様です。
使い方はArr::set()をご覧ください。
head()で配列の最初の値を取得する
例えば、配列にある一番最初の名前を取得する場合です。
$names = ['鈴木', '佐藤', '田中', '山本'];
echo head($names); // 鈴木
last()で配列の最後の値を取得する
例えば、配列にある一番最後の名前を取得する場合です。
$names = ['鈴木', '佐藤', '田中', '山本'];
echo last($names); // 山本
パス
app_path()で「app」フォルダを基準とするパスを取得する
echo app_path('Http/Controllers/Controller.php');
実行結果はこうなります。(実行環境によって変わります)
/home/admin/php-dev/laravel56/app/Http/Controllers/Controller.php
base_path()でアプリケーションのトップパスを基準とするパスを取得する
echo base_path('vendor/bin');
実行結果はこうなります。(実行環境によって変わります)
/home/admin/php-dev/laravel56/vendor/bin
config_path()で「config」フォルダを基準としたパスを取得する
echo config_path('app.php');
実行結果はこうなります。(実行環境によって変わります)
/home/admin/php-dev/laravel56/config/app.php
database_path()で「database」フォルダを基準としたパスを取得する
echo database_path('factories/UserFactory.php');
実行結果はこうなります。(実行環境によって変わります)
/home/admin/php-dev/laravel56/database/factories/UserFactory.php
mix()でバージョン情報の入ったパスを取得する
例えば以下のようにバージョン管理されたコンパイルをLaravel mixを使っておこなっている場合、自動的にそのハッシュ情報を追加したパスを返してくれるヘルパー関数です。
mix.js('resources/assets/js/app.js', 'public/js')
.sass('resources/assets/sass/app.scss', 'public/css')
.version();
使い方はこうなります。
echo mix('css/app.css');
実行結果です。(環境によってidは変わります)
/css/app.css?id=24adec32c39838ad4ff2
public_path()で「public」フォルダを基準としたパスを取得する
echo public_path('css/app.css');
実行結果はこうなります。(実行環境によって変わります)
/home/admin/php-dev/laravel56/public/css/app.css
resource_path()で「reources」フォルダを基準としたパスを取得する
echo resource_path('assets/sass/app.scss');
実行結果はこうなります。(実行環境によって変わります)
/home/admin/php-dev/laravel56/resources/assets/sass/app.scss
storage_path()で「storage」フォルダを基準としたパスを取得する
echo storage_path('app/file.txt');
実行結果はこうなります。(実行環境によって変わります)
/home/admin/php-dev/laravel56/storage/app/file.txt
URL
url()でURLを取得する
サイトのURLを取得する基本となる関数です。
echo url('images/picture.jpg');
これを実行すると以下のようになります。
http://*****.test/images/picture.jpg
また、パラメータを含んだURLを作成したい場合は第2引数に配列で指定します。
url('item', [1]); // http://*****.test/item/1
また、url()は少し特殊で空のまま使うと「UrlGenerator」のインスタンスが返ってきます。つまり、以下のように様々なURL情報を簡単に取得することができます。
$url = url();
echo $url->current();
echo $url->full();
echo $url->previous();
secure_url()でHTTPSを含んだURLを取得する
url()とほぼ同じですがhttps://
が使われます。
ただし、引数を空にした使い方はできません。
action()でコントローラーとアクションからURLを取得する
web.phpなどRouteで定義されたURLを取得する場合です。(つまり、Routeで指定されていないものを指定できません。エラーが発生します。)
echo action('HomeController@index');
もしGETパラメータをつけたい場合は連想配列を第2引数に設定します。
echo action('HomeController@index', ['id' => 1]);
asset()でトップURLを基準にしたURLを取得する
echo asset('img/photo.jpg');
これを実行すると以下のようになります。
http://*****.test/img/photo.jpg
secure_asset()でHTTPSを含んだURLを取得する
echo secure_asset('img/photo.jpg');
これを実行すると以下のようになります。
https://*****.test/img/photo.jpg
route()でルート名を指定してURLを取得する
まず、以下のようにRouteに名前を決めておきます。
Route::get('/contact', 'HomeController@contact')->name('home.contact');
そして、以下のようにすると該当するURLが取得できます。
echo route('home.contact'); // http://*****.test/contact
もし、パラメータが必要なRouteの場合は第2引数に連想配列で指定します。
Route::get('/contact/{id}', 'HomeController@contact')->name('home.contact');
echo route('home.contact', ['id' => 1]);
実行結果はこうなります。
http://*****.test/contact/1
なお、もし相対的なURLを取得したい場合は第3引数に「false」を設定してください。
echo route('home.contact', ['id' => 1], false); // /contact/1
文字列
class_basename()でネームスペースを除去した文字列を取得する
echo class_basename('App\Http\Controllers\HomeController');
実行結果はこうなります。
HomeController
e()で特殊文字をエスケープする
htmlspecialchars()と同じような関数ですが、一文字だけなので使い勝手はこちらの方がいいです。
echo e('<div>テキスト</div>');
実行結果はこうなります。
<div>テキスト</div>gt;
なお、第2引数はダブル・エンコードを許可するかしないかを指定できるようになっています。
例えば「"」のようにすでにエスケープされた文字が含まれている場合で、第2引数を「false」にすると「"」の処理は無視させることができます。(デフォルトはtrueになっています)
echo e('<div>テキスト"</div>', false);
Str::replaceArray()で文字列置換を一気に行う
PHP標準関数のStr::replace()を拡張したような関数で、配列を使うことで一気に文字列置換をすることができます。
$text = '1番目は「?」、2番めは「?」。';
echo Str::replaceArray('?', ['鈴木', '佐藤'], $text);
実行結果はこうなります。
1番目は「鈴木」、2番めは「佐藤」。
Str::replaceFirst()で最初に登場する文字列を入れ替える
echo Str::replaceFirst('様', 'さん', '山田様、佐藤様、田中様'); //
山田さん、佐藤様、田中様
Str::replaceLast()で最後に登場する文字列を入れ替える
echo Str::replaceFirst('様', 'さん', '山田様、佐藤様、田中様'); //
山田様、佐藤様、田中さん
Str::replace_first()で最初の文字だけを置換する
例えば、テキスト中にある最初の「鈴木」を「佐藤」に置換する場合です。
$text = '鈴木さんと鈴木さんです。';
echo Str::replace_first('鈴木', '佐藤', $text);
これを実行するとこうなります。
佐藤さんと鈴木さんです。
Str::replace_last()で最初の文字だけを置換する
例えば、テキスト中にある最後の「鈴木」を「佐藤」に置換する場合です。
$text = '鈴木さんと鈴木さんです。';
echo Str::replace_last('鈴木', '佐藤', $text);
これを実行するとこうなります。
鈴木さんと佐藤さんです。
preg_replace_array()で正規表現を使った文字列置換を一気に行う
PHPの標準関数 preg_replace()を拡張したような関数で、配列を使うことで一気に正規表現を使って文字列置換をすることができます。
$text = '1番目は「:one」、2番めは「:two」。';
echo preg_replace_array('/:[a-z_]+/', ['鈴木', '佐藤'], $text);
これを実行するとこうなります。
1番目は「鈴木」、2番めは「佐藤」。
Str::before()で指定した文字より前の文字列を取得する
echo Str::before('あいうえお', 'うえ'); // あい
Str::after()で指定した文字より後の文字列を取得する
echo Str::after('あいうえお', 'いう'); // えお
Str::start()で指定した文字で始まるテキストを取得する
例えば、必ず始まりが「/」になるURLを取得したい場合です。
// スラッシュなし
echo Str::start('public/images', '/');
// スラッシュあり
echo Str::start('/public/images', '/');
上の例の場合はどちらも
/public/images
となります。
Str::finish()で指定した文字で終わるテキストを取得する
例えば、必ず最後が「/」になるURLを取得したい場合です。
// スラッシュなし
echo Str::finish('public/images', '/');
// スラッシュあり
echo Str::finish('public/images/', '/');
上の例の場合はどちらも
public/images/
となります。
Str::afterLast()である文字列が最後に出現する「以降」の文字列を取得する
$string = '山田太郎|佐藤次郎|田中三郎';
echo Str::afterLast($string, '|'); //
田中三郎
Laravel 6.x
以降
Str::beforeLast()である文字列が最後に出現する「以前」の文字列を取得する
$string = '山田太郎|佐藤次郎|田中三郎';
echo Str::beforeLast($string, '|'); //
山田太郎|佐藤次郎
Laravel 6.x
以降
Str::between()で2つの文字列の間にある部分を取得する
$string = '2020年12月15日';
echo Str::between($string, '年', '月'); // 12
Str::limit()で指定した文字列で切り詰めたテキストを取得する
例えば、長いテキストを表示するスペースがなく最初の部分だけを表示する場合です。
$text = '今日はいい天気です。ただ、明日は雨が降るそうです。';
echo Str::limit($text, 25);
これを実行すると以下のようになります。
今日はいい天気です。ただ...
ここで注意が必要なのが、指定する数字はマルチバイトを考慮しないといけないという部分です。つまり、以下のように長さを3としても日本語だと一文字しか切り詰めてくれません。
Str::limit($text, 3); // 今...
なお、第3引数で切り詰めたあとの文字を指定することもできます。
echo Str::limit($text, 25, '(以下略)');
実行結果はこうなります。
今日はいい天気です。ただ(以下略)
Str::length()で文字数を取得する
echo Str::length('1234567'); // 7
echo Str::length('一二三四五六七'); // 7
Laravel 7.x
以降
Str::plural()で複数形のテキストを取得する
この関数が便利なのは、「woman」「child」などのイレギュラーな複数形も正しく作成できるところです。(あまり日本語環境では使わないかもですが..)
echo Str::plural('item'); // items
echo Str::plural('woman'); // women
また、数字を指定することで単数形と複数形を切り替えることもできます。
echo Str::plural('item', 1); // item(単数形)
echo Str::plural('woman', 2); // women(複数形)
Str::singular()で単数形のテキストを取得する
「women」のような不規則変化の複数形もきちんと単数形に変換することができます。
echo Str::singular('items'); // item
echo Str::singular('women'); // woman
Str::substr()で文字列を切り出す
例えば、(ゼロから始まる)3番目から2文字取得する場合です。
echo Str::substr('一二三四五六七', 3, 2); // 四五
Str::random()でランダムな文字列を取得する
echo Str::random(25); // AsoU1MeQp2jQ0J1V2Mhf9HtZS
Str::lower()で小文字を取得する
echo Str::lower('STRING'); // string
Laravel 7.x
以降
Str::upper()で大文字を取得する
echo Str::upper('string'); // STRING
Laravel 7.x
以降
Str::words()で文字列を切り詰める
echo Str::words('one two three four five', 3, ' ...'); // one two three ...
文字列チェック
Str::startsWith()で指定した文字で始まるかチェックする
if(Str::startsWith('あいうえお', 'あいう')) {
echo '「あいう」ではじまります。';
}
Str::endsWith()で指定した文字で終わるかチェックする
if(Str::endsWith('あいうえお', 'うえお')) {
echo '「うえお」で終わります。';
}
Str::contains()で特定の文字列が含まれているかチェックする
例えば、テキストの中に「鈴木」が含まれているかをチェックする場合です。
if(Str::contains('鈴木さん、佐藤さん', '鈴木')) {
echo '「鈴木」が含まれています。';
}
また、配列を指定することで一気に複数のチェックをすることもできます。
ただし、どちらかが含まれているとtrue
になる点に注意が必要です。全て含まれているかチェックする場合は、Str::containsAll()を使ってください。
if(Str::contains('鈴木さん、佐藤さん', ['鈴木', '佐藤'])) {
echo '「鈴木」もしくは「佐藤」が含まれています。';
}
Str::containsAll()で特定の文字列が全て含まれているかチェックする
Str::contains()では、複数指定したいずれかの文字列が存在していればtrue
になりますが、Str::containsAll()
の場合は指定した全ての文字列が存在している場合にtrue
になります。
if(Str::containsAll('鈴木さん、佐藤さん', ['鈴木', '佐藤'])) {
echo '「鈴木」と「佐藤」が含まれています。';
}
Str::is()でワイルドカードを使ってマッチするかチェックする
ワイルドカードは「*」です。
if(Str::is('今日は*', '今日はいい天気です。')) {
echo 'マッチしました。';
}
もちろんワイルドカードを2つ使ってもチェックが可能です。
if(Str::is('*いい天気*', '今日はいい天気です。')) {
echo 'マッチしました。';
}
Str::isAscii()でアスキー文字かどうかチェックする
if(Str::isAscii('Laravel is magical.')) {
echo 'アスキー文字です'; //
表示されます
}
if(Str::isAscii('ララベルってすごい!')) {
echo 'アスキー文字です'; //
表示されません
}
Laravel 7.x
以降
Str::isUuid()でUUIDかどうかチェックする
if(Str::isUuid('cc194f9b-4650-4838-bafa-b166c973a3a7')) {
echo 'UUIDです'; //
表示されます
}
Laravel 6.x
以降
blank()で内容が空かどうかをチェックする
$value = '';
if(blank($value)) {
echo '空です。';
}
ちなみに空と判断されるのは、以下のような値です。(ただし、全角スペースは空とは判断されないので注意)
$value = ' '; // 半角スペース
$value = null;
$value = collect();
逆に空ではないと判断されるのは、以下のような値になります。
$value = 0;
$value = true;
$value = false;
$value = -1;
if(!blank($value)) {
echo '空ではありません。';
}
filled()で内容が空ではないかどうかをチェックする
blank()の逆バージョンです。
ケース文字列
Str::camel()で「キャメル・ケース」の文字列を取得する
先頭が小文字、つなぎ部分が大文字になる「キャメルケース」の文字列を取得します。
echo Str::camel('one_two_three'); // oneTwoThree
Str::kebab()で「ケバブ・ケース」の文字列を取得する
全て小文字でハイフンを使って文字をつなぐ「ケバブ・ケース」の文字列を取得します。
echo Str::kebab('oneTwoThree'); // one-two-three
Str::slug()で「スラッグ・ケース」の文字列を取得する
echo Str::slug('Hop Step Jump', '-'); // hop-step-jump
Str::snake()で「スネーク・ケース」の文字列を取得する
全て小文字でアンダーバーを使って文字をつなぐ「スネーク・ケース」の文字列を取得します。
echo Str::snake('oneTwoThree'); // one_two_three
Str::studly()で「スタッドリー・ケース」の文字列を取得する
大文字で文字列をつなぐ「スタッドリー・ケース」の文字列を取得します。
echo Str::studly('one_two_three'); // OneTwoThree
Str::ucfirst()で先頭の文字だけ大文字にする
echo Str::ucfirst('one two three'); // One two three
タイトル用の文字列を取得する
アルファベット単語の先頭を大文字にする関数です。(日本語環境ではほぼ利用することはないでしょう)
echo Str::title('this is a pen.'); // This Is A Pen.
翻訳テキスト
__()で翻訳テキストを取得する
例えば、以下のパスにそれぞれ「greeting」というテキスト情報を追加したとします。
英語テキスト:resources/lang/en/message.php
<?php
return [
'greeting' => 'Hi, there!'
];
日本語テキスト:resources/lang/ja/message.php
<?php
return [
'greeting' => 'やぁ、こんにちは!'
];
そして、以下のように__()を使うと、自動的にターゲットの言語テキストが表示されるようになります。
echo __('message.greeting');
なお、以下のように「:」とキーを使うと可変的にテキストを取得することもできます。
<?php
return [
'greeting' => 'やぁ、こんにちは!',
'greeting_2' => 'やぁ、こんにちは!:nameさん'
];
echo __('message.greeting_2', ['name' => '鈴木']);
結果はこうなります。
やぁ、こんにちは!鈴木さん
trans()で翻訳テキストを取得する
__()と同じです。
trans_choice()で件数によって翻訳テキストを切り替えて取得する
例えば、翻訳データに以下のような「|」で区切られたデータを作成します。
<?php
return [
'notification' => 'notification|notifications'
];
そして、以下のようにすると数字が「1」の場合は「notification」、それより大きい場合は「notifications」が選択されます。
echo trans_choice('message.count', 1);
ただし、これは日本語環境では利用できない機能のようです。おそらく言語的に複数形が存在しないためでしょう。
Str::uuid()でUUIDを取得する
詳しくはLaravel5.6の気になる3つの新機能をご覧ください。
echo (string) Str::uuid(); // 7c71cfde-de66-471e-8f5c-a20ff7f7a856
Str::orderedUuid()でUUIDを取得する
UUIDを取得します。ただし、パッケージをインストールするなど準備が必要です。詳しくはLaravel5.6の気になる3つの新機能をご覧ください。
echo (string) Str::orderedUuid(); // 8b6f86b0-0ad0-46e6-a199-8dde26f2a8f8
例外処理
abort()でHTTP例外を発生させる
例えば、403コードを発生させたい場合です。
abort(403);
なお、第2引数ではメッセージ、第3引数ではヘッダー情報を指定することができます。
abort(403, 'アクセスが拒否されました。', [
'your-header' => 'xxxx'
]);
実行結果はこうなります。
abort_if()で条件付きで例外を発生させる
条件がtrueのときに例外が発生します。
$boolean = true;
abort_if($boolean, 403);
abort()と同じく第3引数ではメッセージ、第4引数ではヘッダーをそれぞれ指定することができます。
$boolean = true;
abort_if($boolean, 403, 'アクセスが拒否されました。', [
'your-header' => 'xxxx'
]);
abort_unless()で条件付きで例外を発生させる
条件が「false」のときに例外を発生させます。
使い方はabort_if()と同じです。
throw_if()で条件がtrueの場合に例外を発生させる
$boolean = true;
throw_if($boolean, \Exception::class);
$booleanがtrueの時、例外を発生させることができます。
また、第3引数ではメッセージも指定することができます。
$boolean = true;
throw_if($boolean, \Exception::class, '例外が発生しました!');
実行結果はこうなります。
throw_unless()で条件がfalseの場合に例外を発生させる
throw_if()の逆バージョンです。使い方は同じです。
暗号/復号
encrypt()で暗号化する
$encrypted = encrypt('xxxx');
ちなみに暗号化する内容は配列でも問題ありません。
$encrypted = encrypt(['key' => 'value']);
暗号化されたデータを元に戻すにはdecrypt()を使います。
decrypt()で復号する
encrypt()で暗号化されたデータを元に戻すことができます。
decrypt($encrypted);
その他
app()でサービスコンテナを取得する
$container = app();
echo get_class($container); // Illuminate\Foundation\Application
また、クラスを指定することもできます。
$redirect = app('Illuminate\Routing\Redirector');
echo get_class($redirect); // Illuminate\Routing\Redirector
auth()で認証インスタンスを取得する
$auth = auth();
echo get_class($auth); // Illuminate\Auth\AuthManager
詳しくは、Laravelのよく使うヘルパー関数7選!のauth()をご覧ください。
back()で元ページに戻る
コントローラー内でreturnすることで元ページへリダイレクトされます。
return back();
また、第2〜4引数にそれぞれ
- HTTPステータスコード
- ヘッダー
- リダイレクトURLが特定てきない場合の予備URL
を指定することができます。
return back(302, ['your-header' => 'xxx'], 'auth/login');
bcrypt()でハッシュ値を取得する
このHash値は、パスワードなどに利用されます。
echo bcrypt('your-password'); // $2y$10$rktYv5sMpQwr85M6DBskLuRWivijwsRmVGXlsi2Pk.qXP81WKivvW
broadcast()でイベントを実行する
broadcast(new Ordered());
cache()でキャッシュを操作する
cache()は読み込みと書き込み2つの機能をもっています。
キャッシュの書き込み
cache(['your-key' => 'xxx'], 5);
第1引数は連想配列で保存したいキーと値を指定し、第2引数ではキャッシュを保存する時間(分)、もしくはCarbonインスタンスでもOKです。
$dt = now()->addMinutes(5);
cache(['your-key' => 'xxx'], $dt);
なお、永遠にキャッシュさせたい場合はforever()を使うといいでしょう。
cache()->forever('your-key', 'yyy');
キャッシュの読み込み
echo cache('your-key');
第1引数にキーを指定するだけでキャッシュされたデータを取得することができます。また、もしデータが存在しない場合のためのデフォルト値を第2引数に指定することもできます。
echo cache('your-key', 'デフォルト値');
class_uses_recursive()で利用されているtraitを取得する
例えば、「\App\User」クラスが使っている全トレイトを取得する場合です。
$traits = class_uses_recursive(\App\User::class);
print_r($traits);
trait_uses_recursive()で利用されているtraitを取得する
class_uses_recursive()と似ていますが、こちらは引数にクラスではなくトレイトを指定します。
$traits = trait_uses_recursive(\Illuminate\Notifications\Notifiable::class);
print_r($traits);
collect()でコレクションを作成する
$collection = collect(['id' => 1, 'name' => '鈴木']);
コレクションの使い方は全100種類!Laravel 5.6のコレクション実例を参照してください。
config()で設定情報を取得する
echo config('app.name');
指定するキーの先頭はconfigファイル名でその後はドットつなぎで配列の下層を指定することができます。つまり、上の例で言うと「app.php内のnameというキーの値を取得する」となります。
また、キーが存在しないときのためにデフォルト値を指定することもできます。
echo config('app.xxx', 'デフォルト値');
なお、第1引数を連想配列にすることで設定情報を入れ替えることもできます。
config(['app.name' => '新しいサイト名']);
ただし、元の設定ファイルが書き換えられるわけではないので、混乱をさけるため極力この記述は使わず、きちんと設定ファイルを変更すべきです。
$cookie = cookie('your-key', 'xxx', 5);
第1引数はキー、第2引数が値、第3引数は継続時間(分)です。
なお、クッキーの読み込みと書き込みは以下のように行います。
クッキーの書き込み
読み込みにはRequestを使います。
public function helpers(Request $request) {
echo $request->cookie('your-key');
}
もしくはヘルパー関数を使って、以下のようにすることもできます。
echo request()->cookie('your-key');
クッキーの書き込み
書き込みはレスポンスとともに行います。
return response('Cookie Test')->cookie('your-key', 'xxx', 5);
つまり、リダイレクトなどでも同様にクッキーを作成することができます。
return redirect('home')->cookie('your-key', 'xxx', 5);
session()でセッションを管理する
session()は2つの役割を持っています。
セッションを書き込む
session(['your-key' => 'xxx']);
第1引数に連想配列を指定するとセッション・データを書き込むことができます。
セッションを読み込む
echo session('your-key');
第1引数にキーを指定した場合はセッション・データを読み込むことができます。
セッション・インスタンスを取得する
もし引数が空の場合はセッション・インスタンスが返されます。そのため、get()やput()などをアローでつなげて利用することも可能です。
$session = session(); // セッション・インスタンス
echo $session->get('your-key'); // 読み込み
$session->put('your-key', 'yyy'); // 書き込み
echo csrf_field();
これを実行すると以下のようなランダムな文字列を含んだインプットタグが取得できます。主にBladeテンプレートの中で使うことになるでしょう。
<input type="hidden" name="_token" value="4WemYq0jj9gSKYETaCkhLUP9izlGyyp1LrRcNYJq">
csrf_token()でクロスサイト・リクエスト・フォージェリ用トークンを取得する
echo csrf_token();
csrf_field()の場合はインプットタグまで作成しますが、こちらはその中身だけを取得するヘルパー関数です。Ajaxなどでトークンが必要になる場合に重宝するでしょう。
dispatch()でキューを発行する
dispatch(new App\Jobs\SendEmails);
dispatch_now()で即時キューを発行する
$result = dispatch_now(new App\Jobs\SendEmails);
env()で環境変数を取得する
echo env('APP_ENV'); // local, productionなど
※注意
ただし、artisanコマンドの「config:cache」を使ってしまうと「.env」が読み込めず内容がnullになってしまう可能性があります。
event()でイベントを実行する
event(new UserRegistered($user));
factory()でファクトリービルダーを取得する
$user = factory(\App\User::class)->make();
echo method_field('PUT');
これを実行すると以下のようなタグが取得できます。主にBladeテンプレートのフォーム内で使うことになるでしょう。
<input type="hidden" name="_method" value="PUT">
now()で現在時間のCarbonインスタンスを取得する
$now = now(); // Carbonインスタンス
echo $now->toDateTimeString();
これを実行すると以下のようになります。
2018-08-02 20:34:14
today()で今日のCarbonインスタンスを取得する
now()と同じくCarbonインスタンスを取得しますが、こちらは今日がはじまる時間を取得します。
つまり、「今日の日付」+「00時00分00秒」のCarbonインスタンスです。
$today = today();
echo $today->toDateTimeString(); // 2018-08-02 00:00:00
old()で入力済みのデータを取得する
例えば、入力フォームに名前を入力し、バリデーションで失敗した場合にすでに入力されたデータを取得する場合です。
echo old('key');
echo old('key', 'デフォルト値');
詳しくは、Laravelリダイレクト実例・全5パターンの「直前のページへ戻るリダイレクト」を参考にしてください。
optional()でエラーを発生させないコードにする
例えば、存在しないユーザーデータを取得してその名前を表示する以下のようなコードを見てみましょう。
// これはエラーになります。
$user = \App\User::find(-1);
echo $user->name;
これは実際にはエラーが表示されることになります。
optional()を使えばこのエラー発生をさせないようにすることが可能です。
$user = \App\User::find(-1);
echo optional($user)->name;
この場合、実際のデータはnullが返ることになります。
policy()でPolicyインスタンスを取得する
policy(\App\User::class);
redirect()でリダイレクトする
詳しくは、Laravelリダイレクト実例・全5パターンをご覧ください。
request()でフォーム・リクエストを取得する
引数を空にすると「Illuminate\Http\Request」のインスタンスが返ってきます。
$request = request(); // Requestインスタンス
$user = $request->user();
また、フォーム・パラメータを取得する場合は第1引数でキーを指定します。
echo request('your-key');
なお、第2引数にはデフォルト値を指定することもできます。
echo request('your-key', 'デフォルト値');
resolve()でインスタンスを取得する
$user = resolve('\App\User');
echo get_class($user); // \App\User
response()でレスポンス・インスタンスを取得する
詳しくは、Laravelのよく使うヘルパー関数7選!のresponse()をご覧ください。
retry()で指定回数の処理を繰り返す
retry()はPHPのtryを何回か繰り返す関数です。つまり、HTTPアクセスが失敗する可能性があるスクレイピングをする場合などに利用するといいでしょう。
retry(5, function () {
echo test; // 例外発生
}, 100);
この例は「ダメなら100ミリ秒間隔で5回までfunction()を実行する」例です。
ちなみにfunction()内でreturnした値を受け取ることもできます。
$user = retry(5, function () {
return [
'id' => 1,
'name' => '鈴木'
];
}, 100);
tap()で無名関数を実行して引数を取得する
echo tap('鈴木', function ($name) {
// 何かを実行
});
これを実行すると「鈴木」と表示されます。どういった使用法を想定しているのか疑問ですが、おそらくコードを少なくするためのものだろうと推測しています。
なお、注意が必要なのは無名関数の中でreturnしても返り値には反映されないということです。
echo tap('鈴木', function ($name) {
return $name .'さん';
});
この例では「鈴木さん」が返って来そうですが、実際には先ほどと同じく「鈴木」しか返ってきません。
transform()でデータを加工する
例えば、「鈴木」という文字列に「さん」をつける場合です。
echo transform('鈴木', function($name){
return $name .'さん';
});
これを実行すると「すずきさん」となります。
なお、第3引数にはデフォルト値を指定することができ、もし第1引数が空白である場合はこのデフォルト値が適用されることになります。
echo transform(null, function($name){
return $name .'さん';
}, '名前無し'); // 名前無し
validator()でバリデーション・インスタンスを取得する
$validator = validator($data, $rules, $messages);
value()で値を取得する
echo value('鈴木');
value()の引数に通常の値を指定するとそのままの値が返されてきます。(あまり意味があるようには思えません)
なお、function()を使って値を返すこともできます。これを使えば、例えば「日曜日だけは鈴木さんの担当」のような使い方ができます。
echo value(function(){
if(today()->isSunday()) {
return '鈴木'; // 日曜だけ鈴木さんが担当
}
return '佐藤';
});
もしfunction()内の引数を指定したい場合はwith()を使いましょう。
view()でビューを取得する
コントローラー内でview()を返すことでページ表示をさせることができます。
return view('auth.login');
with()で値を取得する
value()と似ていますが、こちらは引数も同時に指定することができます。
echo with(today(), function($today){
if($today->isSunday()) {
return '鈴木'; // 日曜だけ鈴木さんが担当
}
return '佐藤';
});
開発テスト
dd()で変数の中身を確認する
$names = ['鈴木', '佐藤', '田中', '山本'];
dd($names);
これを実行すると以下のようになります。
ちなみにdd()を使うと処理が強制的に終了されます。もし最後までコードを実行したい場合はdump()を使いましょう。
dump()で変数の中身をチェックする
dd()と同じですが、こちらは処理が途中で止まることはなく、最後までコードが実行されます。つまり、以下の「test」は表示されることになります。
$names = ['鈴木', '佐藤', '田中', '山本'];
dump($names);
echo 'test';
info()でデータをログに書き込む
info('このテキストはログに書き込まれます');
これを実行すると以下のような内容がログに書き込まれることになります。echo やdd()などでデータ表示しにくい場合やcronの調整などで利用するといいでしょう。
[2018-08-02 09:24:22] local.INFO: このテキストはログに書き込まれます
また、その他のデータも書き込みたい場合は第2引数にセットします。
info('このテキストはログに書き込まれます', [
'key_1' => 'value_1',
'key_2' => 'value_2',
'key_3' => 'value_3',
]);
実行結果はこうなります。
[2018-08-02 09:25:22] local.INFO: このテキストはログに書き込まれます {"key_1":"value_1","key_2":"value_2","key_3":"value_3"}
logger()でデバッグ用ログを書き込む
ほぼinfo()と同じ内容ですが、書き込まれる内容が以下のように少しだけ違っています。
[2018-08-02 09:30:29] local.DEBUG: デバッグレベルのログを書き込みます
また、エラー用のログを書き込む場合は以下のようにerror()をアローでつなげます。
logger()->error('これはエラー用ログです。');
[2018-08-02 09:35:07] local.ERROR: これはエラー用ログです。
report()で例外情報を報告する
「app/Exceptions/Handler.php」のreportメソッドを実行するヘルパー関数です。色々とカスタマイズは可能ですが、初期状態で以下のようにすると、「storage/logs/laravel.log」に例外情報を書き込むことができます。
try {
throw new \Exception;
} catch(\Exception $e) {
report($e);
}
rescue()で例外処理を報告する
これもreport()と同様で「app/Exceptions/Handler.php」のreport()メソッドを実行する関数ですが、例外が発生する(かもしれない)コードはfunction()の中に書きます。
例えば、xxx()というメソッドが存在しないのに実行しようとした場合です。
rescue(function () {
return $this->xxx(); // 存在しないので例外が発生する
});
なお、rescue()で重要な点は「例外が発生しても処理が終わらない」という点です。
また、第2引数には例外が発生した場合に返す値を指定することができます。
$result = rescue(function () {
return $this->xxx();
}, false);
この場合、返り値「$result」のパターンは以下のようになります。
- 例外が発生した ・・・ false
- 例外が発生しなかった ・・・ null
なお、第2引数はfunction()にすることも可能です。
$result = rescue(function () {
return $this->xxx();
}, function(){
return false;
});
おわりに
今回も少し長い記事になってしまいましたが、私個人もいい学び直しができました。特に「optional()
」は今回始めて知ったのですが、この関数はとても便利だと気づくことができました。
例えば、ユーザーデータが存在していない場合はなど、今まではIF文でis_null()などとして、ユーザー情報の存在チェックをしてから使うようにしてましたが、IF文は可読性を考慮して数行使ってしまうため、もっとショート・コードにできないものかと考えてました。optional()
を使えばよりシンプルなコードが書けそうです。
・・・ということで今回はLaravel
のもつ便利なヘルパー関数の全実例をお届けしました。みなさんの開発業務がより効率化されると嬉しいです。
ではでは!
「効率化っていい響きですね」