はじめに

Laravel にはさまざまなグローバル「ヘルパー」PHP 関数が含まれています。これらの関数の多くはフレームワーク自体によって使用されますが、便利だと感じた場合は自分のアプリケーションで自由に使用できます。

利用可能なメソッド

配列とオブジェクト

Arr::accessible Arr::add Arr::collapse Arr::crossJoin Arr::divide Arr::dot Arr::except Arr::exists Arr::first Arr::flatten Arr::forget Arr::get Arr::has Arr::hasAny Arr::isAssoc Arr::isList Arr::join Arr::keyBy Arr::last Arr::map Arr::mapSpread Arr::mapWithKeys Arr::only Arr::pluck Arr::prepend Arr::prependKeysWith Arr::pull Arr::query Arr::random Arr::set Arr::shuffle Arr::sort Arr::sortDesc Arr::sortRecursive Arr::take Arr::toCssClasses Arr::toCssStyles Arr::undot Arr::where Arr::whereNotNull Arr::wrap data_fill data_get data_set data_forget head last

数値

Number::abbreviate Number::clamp Number::currency Number::fileSize Number::forHumans Number::format Number::ordinal Number::pairs Number::percentage Number::spell Number::trim Number::useLocale Number::withLocale

パス

app_path base_path config_path database_path lang_path mix public_path resource_path storage_path

URL

action asset route secure_asset secure_url to_route url

その他

abort abort_if abort_unless app auth back bcrypt blank broadcast cache class_uses_recursive collect config context cookie csrf_field csrf_token decrypt dd dispatch dispatch_sync dump encrypt env event fake filled info literal logger method_field now old once optional policy redirect report report_if report_unless request rescue resolve response retry session tap throw_if throw_unless today trait_uses_recursive transform validator value view with when

配列とオブジェクト

Arr::accessible()

Arr::accessible メソッドは、指定された値が配列にアクセス可能かどうかを判断します:

  1. use Illuminate\Support\Arr;
  2. use Illuminate\Support\Collection;
  3. $isAccessible = Arr::accessible(['a' => 1, 'b' => 2]);
  4. // true
  5. $isAccessible = Arr::accessible(new Collection);
  6. // true
  7. $isAccessible = Arr::accessible('abc');
  8. // false
  9. $isAccessible = Arr::accessible(new stdClass);
  10. // false

Arr::add()

Arr::add メソッドは、指定されたキー / 値ペアを配列に追加します。指定されたキーが配列に存在しない場合、または null に設定されている場合に追加されます:

  1. use Illuminate\Support\Arr;
  2. $array = Arr::add(['name' => 'Desk'], 'price', 100);
  3. // ['name' => 'Desk', 'price' => 100]
  4. $array = Arr::add(['name' => 'Desk', 'price' => null], 'price', 100);
  5. // ['name' => 'Desk', 'price' => 100]

Arr::collapse()

Arr::collapse メソッドは、配列の配列を単一の配列に折りたたみます:

  1. use Illuminate\Support\Arr;
  2. $array = Arr::collapse([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
  3. // [1, 2, 3, 4, 5, 6, 7, 8, 9]

Arr::crossJoin()

Arr::crossJoin メソッドは、指定された配列をクロス結合し、すべての可能な順列を持つデカルト積を返します:

  1. use Illuminate\Support\Arr;
  2. $matrix = Arr::crossJoin([1, 2], ['a', 'b']);
  3. /*
  4. [
  5. [1, 'a'],
  6. [1, 'b'],
  7. [2, 'a'],
  8. [2, 'b'],
  9. ]
  10. */
  11. $matrix = Arr::crossJoin([1, 2], ['a', 'b'], ['I', 'II']);
  12. /*
  13. [
  14. [1, 'a', 'I'],
  15. [1, 'a', 'II'],
  16. [1, 'b', 'I'],
  17. [1, 'b', 'II'],
  18. [2, 'a', 'I'],
  19. [2, 'a', 'II'],
  20. [2, 'b', 'I'],
  21. [2, 'b', 'II'],
  22. ]
  23. */

Arr::divide()

Arr::divide メソッドは、2つの配列を返します: 1つはキーを含み、もう1つは指定された配列の値を含みます:

  1. use Illuminate\Support\Arr;
  2. [$keys, $values] = Arr::divide(['name' => 'Desk']);
  3. // $keys: ['name']
  4. // $values: ['Desk']

Arr::dot()

Arr::dot メソッドは、多次元配列を単一レベルの配列にフラット化し、「ドット」表記を使用して深さを示します:

  1. use Illuminate\Support\Arr;
  2. $array = ['products' => ['desk' => ['price' => 100]]];
  3. $flattened = Arr::dot($array);
  4. // ['products.desk.price' => 100]

Arr::except()

Arr::except メソッドは、指定されたキー / 値ペアを配列から削除します:

  1. use Illuminate\Support\Arr;
  2. $array = ['name' => 'Desk', 'price' => 100];
  3. $filtered = Arr::except($array, ['price']);
  4. // ['name' => 'Desk']

Arr::exists()

Arr::exists メソッドは、指定されたキーが提供された配列に存在するかどうかを確認します:

  1. use Illuminate\Support\Arr;
  2. $array = ['name' => 'John Doe', 'age' => 17];
  3. $exists = Arr::exists($array, 'name');
  4. // true
  5. $exists = Arr::exists($array, 'salary');
  6. // false

Arr::first()

Arr::first メソッドは、指定された真理テストを通過する配列の最初の要素を返します:

  1. use Illuminate\Support\Arr;
  2. $first = Arr::first($array, $callback, $default);

Arr::flatten()

Arr::flatten メソッドは、多次元配列を単一レベルの配列にフラット化します:

  1. use Illuminate\Support\Arr;
  2. $array = ['name' => 'Joe', 'languages' => ['PHP', 'Ruby']];
  3. $flattened = Arr::flatten($array);
  4. // ['Joe', 'PHP', 'Ruby']

Arr::forget()

Arr::forget メソッドは、「ドット」表記を使用して深くネストされた配列から指定されたキー / 値ペアを削除します:

  1. use Illuminate\Support\Arr;
  2. $array = ['products' => ['desk' => ['price' => 100]]];
  3. Arr::forget($array, 'products.desk');
  4. // ['products' => []]

Arr::get()

Arr::get メソッドは、「ドット」表記を使用して深くネストされた配列から値を取得します:

  1. use Illuminate\Support\Arr;
  2. $discount = Arr::get($array, 'products.desk.discount', 0);
  3. // 0

Arr::has()

Arr::has メソッドは、指定されたアイテムまたはアイテムが配列に存在するかどうかを確認します。「ドット」表記を使用します:

  1. use Illuminate\Support\Arr;
  2. $array = ['product' => ['name' => 'Desk', 'price' => 100]];
  3. $contains = Arr::has($array, 'product.name');
  4. // true
  5. $contains = Arr::has($array, ['product.price', 'product.discount']);
  6. // false

Arr::hasAny()

Arr::hasAny メソッドは、指定されたセット内の任意のアイテムが配列に存在するかどうかを確認します。「ドット」表記を使用します:

  1. use Illuminate\Support\Arr;
  2. $array = ['product' => ['name' => 'Desk', 'price' => 100]];
  3. $contains = Arr::hasAny($array, 'product.name');
  4. // true
  5. $contains = Arr::hasAny($array, ['product.name', 'product.discount']);
  6. // true
  7. $contains = Arr::hasAny($array, ['category', 'product.discount']);
  8. // false

Arr::isAssoc()

Arr::isAssoc メソッドは、指定された配列が連想配列である場合 true を返します。配列は、ゼロから始まる連続した数値キーを持たない場合、「連想配列」と見なされます:

  1. use Illuminate\Support\Arr;
  2. $isAssoc = Arr::isAssoc(['product' => ['name' => 'Desk', 'price' => 100]]);
  3. // true
  4. $isAssoc = Arr::isAssoc([1, 2, 3]);
  5. // false

Arr::isList()

Arr::isList メソッドは、指定された配列のキーがゼロから始まる連続した整数である場合 true を返します:

  1. use Illuminate\Support\Arr;
  2. $isList = Arr::isList(['foo', 'bar', 'baz']);
  3. // true
  4. $isList = Arr::isList(['product' => ['name' => 'Desk', 'price' => 100]]);
  5. // false

Arr::join()

Arr::join メソッドは、配列の要素を文字列で結合します。このメソッドの第2引数を使用して、配列の最後の要素の結合文字列を指定することもできます:

  1. use Illuminate\Support\Arr;
  2. $array = ['Tailwind', 'Alpine', 'Laravel', 'Livewire'];
  3. $joined = Arr::join($array, ', ');
  4. // Tailwind, Alpine, Laravel, Livewire
  5. $joined = Arr::join($array, ', ', ' and ');
  6. // Tailwind, Alpine, Laravel and Livewire

Arr::keyBy()

Arr::keyBy メソッドは、指定されたキーで配列をキー付けします。複数のアイテムが同じキーを持つ場合、新しい配列には最後のものだけが表示されます:

  1. use Illuminate\Support\Arr;
  2. $array = [
  3. ['product_id' => 'prod-100', 'name' => 'Desk'],
  4. ['product_id' => 'prod-200', 'name' => 'Chair'],
  5. ];
  6. $keyed = Arr::keyBy($array, 'product_id');
  7. /*
  8. [
  9. 'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
  10. 'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
  11. ]
  12. */

Arr::last()

Arr::last メソッドは、指定された真理テストを通過する配列の最後の要素を返します:

  1. use Illuminate\Support\Arr;
  2. $last = Arr::last($array, $callback, $default);

Arr::map()

Arr::map メソッドは、配列を反復処理し、各値とキーを指定されたコールバックに渡します。配列の値はコールバックによって返された値で置き換えられます:

  1. use Illuminate\Support\Arr;
  2. $array = ['first' => 'james', 'last' => 'kirk'];
  3. $mapped = Arr::map($array, function (string $value, string $key) {
  4. return ucfirst($value);
  5. });
  6. // ['first' => 'James', 'last' => 'Kirk']

Arr::mapSpread()

Arr::mapSpread メソッドは、配列を反復処理し、各ネストされたアイテムの値を指定されたクロージャに渡します。クロージャはアイテムを変更して返すことができ、新しい変更されたアイテムの配列を形成します:

  1. use Illuminate\Support\Arr;
  2. $array = [
  3. [0, 1],
  4. [2, 3],
  5. [4, 5],
  6. [6, 7],
  7. [8, 9],
  8. ];
  9. $mapped = Arr::mapSpread($array, function (int $even, int $odd) {
  10. return $even + $odd;
  11. });
  12. /*
  13. [1, 5, 9, 13, 17]
  14. */

Arr::mapWithKeys()

Arr::mapWithKeys メソッドは、配列を反復処理し、各値を指定されたコールバックに渡します。コールバックは、単一のキー / 値ペアを含む連想配列を返す必要があります:

  1. use Illuminate\Support\Arr;
  2. $array = [
  3. [
  4. 'name' => 'John',
  5. 'department' => 'Sales',
  6. 'email' => '',
  7. ],
  8. [
  9. 'name' => 'Jane',
  10. 'department' => 'Marketing',
  11. 'email' => '',
  12. ]
  13. ];
  14. $mapped = Arr::mapWithKeys($array, function (array $item, int $key) {
  15. return [$item['email'] => $item['name']];
  16. });
  17. /*
  18. [
  19. '' => 'John',
  20. '' => 'Jane',
  21. ]
  22. */

Arr::only()

Arr::only メソッドは、指定されたキー / 値ペアのみを指定された配列から返します:

  1. use Illuminate\Support\Arr;
  2. $array = ['name' => 'Desk', 'price' => 100, 'orders' => 10];
  3. $slice = Arr::only($array, ['name', 'price']);
  4. // ['name' => 'Desk', 'price' => 100]

Arr::pluck()

Arr::pluck メソッドは、配列から指定されたキーのすべての値を取得します:

  1. use Illuminate\Support\Arr;
  2. $names = Arr::pluck($array, 'developer.name', 'developer.id');
  3. // [1 => 'Taylor', 2 => 'Abigail']

Arr::prepend()

Arr::prepend メソッドは、アイテムを配列の先頭に追加します:

  1. use Illuminate\Support\Arr;
  2. $array = ['price' => 100];
  3. $array = Arr::prepend($array, 'Desk', 'name');
  4. // ['name' => 'Desk', 'price' => 100]

Arr::prependKeysWith()

Arr::prependKeysWith は、連想配列のすべてのキー名を指定されたプレフィックスで前置きします:

  1. use Illuminate\Support\Arr;
  2. $array = [
  3. 'name' => 'Desk',
  4. 'price' => 100,
  5. ];
  6. $keyed = Arr::prependKeysWith($array, 'product.');
  7. /*
  8. [
  9. 'product.name' => 'Desk',
  10. 'product.price' => 100,
  11. ]
  12. */

Arr::pull()

Arr::pull メソッドは、配列からキー / 値ペアを返し、削除します:

  1. use Illuminate\Support\Arr;
  2. $value = Arr::pull($array, $key, $default);

Arr::query()

Arr::query メソッドは、配列をクエリ文字列に変換します:

  1. use Illuminate\Support\Arr;
  2. $array = [
  3. 'name' => 'Taylor',
  4. 'order' => [
  5. 'column' => 'created_at',
  6. 'direction' => 'desc'
  7. ]
  8. ];
  9. Arr::query($array);
  10. // name=Taylor&order[column]=created_at&order[direction]=desc

Arr::random()

Arr::random メソッドは、配列からランダムな値を返します:

  1. use Illuminate\Support\Arr;
  2. $items = Arr::random($array, 2);
  3. // [2, 5] - (retrieved randomly)

Arr::set()

Arr::set メソッドは、「ドット」表記を使用して深くネストされた配列内に値を設定します:

  1. use Illuminate\Support\Arr;
  2. $array = ['products' => ['desk' => ['price' => 100]]];
  3. Arr::set($array, 'products.desk.price', 200);
  4. // ['products' => ['desk' => ['price' => 200]]]

Arr::shuffle()

Arr::shuffle メソッドは、配列内のアイテムをランダムにシャッフルします:

  1. use Illuminate\Support\Arr;
  2. $array = Arr::shuffle([1, 2, 3, 4, 5]);
  3. // [3, 2, 5, 1, 4] - (generated randomly)

Arr::sort()

Arr::sort メソッドは、配列をその値でソートします:

  1. use Illuminate\Support\Arr;
  2. $array = [
  3. ['name' => 'Desk'],
  4. ['name' => 'Table'],
  5. ['name' => 'Chair'],
  6. ];
  7. $sorted = array_values(Arr::sort($array, function (array $value) {
  8. return $value['name'];
  9. }));
  10. /*
  11. [
  12. ['name' => 'Chair'],
  13. ['name' => 'Desk'],
  14. ['name' => 'Table'],
  15. ]
  16. */

Arr::sortDesc()

Arr::sortDesc メソッドは、配列をその値で降順にソートします:

  1. use Illuminate\Support\Arr;
  2. $array = [
  3. ['name' => 'Desk'],
  4. ['name' => 'Table'],
  5. ['name' => 'Chair'],
  6. ];
  7. $sorted = array_values(Arr::sortDesc($array, function (array $value) {
  8. return $value['name'];
  9. }));
  10. /*
  11. [
  12. ['name' => 'Table'],
  13. ['name' => 'Desk'],
  14. ['name' => 'Chair'],
  15. ]
  16. */

Arr::sortRecursive()

Arr::sortRecursive メソッドは、sort 関数を使用して数値インデックスのサブ配列を、ksort 関数を使用して連想サブ配列を再帰的にソートします:

  1. $sorted = Arr::sortRecursiveDesc($array);

Arr::take()

Arr::take メソッドは、指定された数のアイテムを持つ新しい配列を返します:

  1. $array = [0, 1, 2, 3, 4, 5];
  2. $chunk = Arr::take($array, -2);
  3. // [4, 5]

Arr::toCssClasses()

Arr::toCssClasses メソッドは、条件に応じて CSS クラス文字列をコンパイルします。このメソッドは、配列のクラスを受け入れ、配列のキーには追加したいクラスが含まれ、値はブール式です。配列要素に数値キーがある場合、常にレンダリングされたクラスリストに含まれます:

  1. use Illuminate\Support\Arr;
  2. $isActive = false;
  3. $hasError = true;
  4. $array = ['p-4', 'font-bold' => $isActive, 'bg-red' => $hasError];
  5. $classes = Arr::toCssClasses($array);
  6. /*
  7. 'p-4 bg-red'
  8. */

Arr::toCssStyles()

Arr::toCssStyles メソッドは、条件に応じて CSS スタイル文字列をコンパイルします。このメソッドは、配列のクラスを受け入れ、配列のキーには追加したいクラスが含まれ、値はブール式です。配列要素に数値キーがある場合、常にレンダリングされたクラスリストに含まれます:

  1. use Illuminate\Support\Arr;
  2. $hasColor = true;
  3. $array = ['background-color: blue', 'color: blue' => $hasColor];
  4. $classes = Arr::toCssStyles($array);
  5. /*
  6. 'background-color: blue; color: blue;'
  7. */

このメソッドは、Blade コンポーネントの属性バグとクラスをマージする機能や、@class Blade ディレクティブを可能にします。

Arr::undot()

Arr::undot メソッドは、「ドット」表記を使用して単一次元配列を多次元配列に展開します:

  1. use Illuminate\Support\Arr;
  2. $array = [
  3. 'user.name' => 'Kevin Malone',
  4. 'user.occupation' => 'Accountant',
  5. ];
  6. $array = Arr::undot($array);
  7. // ['user' => ['name' => 'Kevin Malone', 'occupation' => 'Accountant']]

Arr::where()

Arr::where メソッドは、指定されたクロージャを使用して配列をフィルタリングします:

  1. use Illuminate\Support\Arr;
  2. $array = [100, '200', 300, '400', 500];
  3. $filtered = Arr::where($array, function (string|int $value, int $key) {
  4. return is_string($value);
  5. });
  6. // [1 => '200', 3 => '400']

Arr::whereNotNull()

Arr::whereNotNull メソッドは、指定された配列からすべての null 値を削除します:

  1. use Illuminate\Support\Arr;
  2. $array = [0, null];
  3. $filtered = Arr::whereNotNull($array);
  4. // [0 => 0]

Arr::wrap()

Arr::wrap メソッドは、指定された値を配列でラップします。指定された値がすでに配列である場合、変更せずに返されます:

  1. use Illuminate\Support\Arr;
  2. $array = Arr::wrap(null);
  3. // []

data_fill()

data_fill 関数は、「ドット」表記を使用してネストされた配列またはオブジェクト内の欠落している値を設定します:

  1. $data = ['products' => ['desk' => ['price' => 100]]];
  2. data_fill($data, 'products.desk.price', 200);
  3. // ['products' => ['desk' => ['price' => 100]]]
  4. data_fill($data, 'products.desk.discount', 10);
  5. // ['products' => ['desk' => ['price' => 100, 'discount' => 10]]]

この関数は、ワイルドカードとしてアスタリスクを受け入れ、ターゲットを適切に埋めます:

  1. $data = [
  2. 'products' => [
  3. ['name' => 'Desk 1', 'price' => 100],
  4. ['name' => 'Desk 2'],
  5. ],
  6. ];
  7. data_fill($data, 'products.*.price', 200);
  8. /*
  9. [
  10. 'products' => [
  11. ['name' => 'Desk 1', 'price' => 100],
  12. ['name' => 'Desk 2', 'price' => 200],
  13. ],
  14. ]
  15. */

data_get()

data_get 関数は、「ドット」表記を使用してネストされた配列またはオブジェクトから値を取得します:

  1. $data = ['products' => ['desk' => ['price' => 100]]];
  2. $price = data_get($data, 'products.desk.price');
  3. // 100

data_get 関数は、指定されたキーが見つからない場合に返されるデフォルト値も受け入れます:

  1. $discount = data_get($data, 'products.desk.discount', 0);
  2. // 0

この関数は、アスタリスクを使用してワイルドカードを受け入れ、配列またはオブジェクトの任意のキーをターゲットにすることができます:

  1. $data = [
  2. 'product-one' => ['name' => 'Desk 1', 'price' => 100],
  3. 'product-two' => ['name' => 'Desk 2', 'price' => 150],
  4. ];
  5. data_get($data, '*.name');
  6. // ['Desk 1', 'Desk 2'];

{first} および {last} プレースホルダーを使用して、配列の最初または最後のアイテムを取得できます:

  1. $flight = [
  2. 'segments' => [
  3. ['from' => 'LHR', 'departure' => '9:00', 'to' => 'IST', 'arrival' => '15:00'],
  4. ['from' => 'IST', 'departure' => '16:00', 'to' => 'PKX', 'arrival' => '20:00'],
  5. ],
  6. ];
  7. data_get($flight, 'segments.{first}.arrival');
  8. // 15:00

data_set()

data_set 関数は、「ドット」表記を使用してネストされた配列またはオブジェクト内に値を設定します:

  1. $data = ['products' => ['desk' => ['price' => 100]]];
  2. data_set($data, 'products.desk.price', 200);
  3. // ['products' => ['desk' => ['price' => 200]]]

この関数は、アスタリスクを使用してワイルドカードを受け入れ、ターゲットに値を設定します:

  1. $data = [
  2. 'products' => [
  3. ['name' => 'Desk 1', 'price' => 100],
  4. ['name' => 'Desk 2', 'price' => 150],
  5. ],
  6. ];
  7. data_set($data, 'products.*.price', 200);
  8. /*
  9. [
  10. 'products' => [
  11. ['name' => 'Desk 1', 'price' => 200],
  12. ['name' => 'Desk 2', 'price' => 200],
  13. ],
  14. ]
  15. */

デフォルトでは、既存の値は上書きされます。値が存在しない場合にのみ設定したい場合は、関数の第4引数に false を渡すことができます:

  1. $data = ['products' => ['desk' => ['price' => 100]]];
  2. data_set($data, 'products.desk.price', 200, overwrite: false);
  3. // ['products' => ['desk' => ['price' => 100]]]

data_forget()

data_forget 関数は、「ドット」表記を使用してネストされた配列またはオブジェクト内の値を削除します:

  1. $data = ['products' => ['desk' => ['price' => 100]]];
  2. data_forget($data, 'products.desk.price');
  3. // ['products' => ['desk' => []]]

この関数は、アスタリスクを使用してワイルドカードを受け入れ、ターゲットから値を削除します:

  1. $data = [
  2. 'products' => [
  3. ['name' => 'Desk 1', 'price' => 100],
  4. ['name' => 'Desk 2', 'price' => 150],
  5. ],
  6. ];
  7. data_forget($data, 'products.*.price');
  8. /*
  9. [
  10. 'products' => [
  11. ['name' => 'Desk 1'],
  12. ['name' => 'Desk 2'],
  13. ],
  14. ]
  15. */

head()

head 関数は、指定された配列の最初の要素を返します:

  1. $array = [100, 200, 300];
  2. $first = head($array);
  3. // 100

last()

last 関数は、指定された配列の最後の要素を返します:

  1. $array = [100, 200, 300];
  2. $last = last($array);
  3. // 300

数値

Number::abbreviate()

Number::abbreviate メソッドは、提供された数値の人間が読みやすい形式を返し、単位の省略形を含みます:

  1. use Illuminate\Support\Number;
  2. $number = Number::abbreviate(1000);
  3. // 1K
  4. $number = Number::abbreviate(489939);
  5. // 490K
  6. $number = Number::abbreviate(1230000, precision: 2);
  7. // 1.23M

Number::clamp()

Number::clamp メソッドは、指定された数値が指定された範囲内に収まることを保証します。数値が最小値より低い場合、最小値が返されます。数値が最大値より高い場合、最大値が返されます:

  1. use Illuminate\Support\Number;
  2. $number = Number::clamp(105, min: 10, max: 100);
  3. // 100
  4. $number = Number::clamp(5, min: 10, max: 100);
  5. // 10
  6. $number = Number::clamp(10, min: 10, max: 100);
  7. // 10
  8. $number = Number::clamp(20, min: 10, max: 100);
  9. // 20

Number::currency()

Number::currency メソッドは、指定された値の通貨表現を文字列として返します:

  1. use Illuminate\Support\Number;
  2. $currency = Number::currency(1000);
  3. // $1,000.00
  4. $currency = Number::currency(1000, in: 'EUR');
  5. // €1,000.00
  6. $currency = Number::currency(1000, in: 'EUR', locale: 'de');
  7. // 1.000,00 €

Number::fileSize()

Number::fileSize メソッドは、指定されたバイト値のファイルサイズ表現を文字列として返します:

  1. use Illuminate\Support\Number;
  2. $size = Number::fileSize(1024);
  3. // 1 KB
  4. $size = Number::fileSize(1024 * 1024);
  5. // 1 MB
  6. $size = Number::fileSize(1024, precision: 2);
  7. // 1.00 KB

Number::forHumans()

Number::forHumans メソッドは、提供された数値の人間が読みやすい形式を返します:

  1. use Illuminate\Support\Number;
  2. $number = Number::forHumans(1000);
  3. // 1 thousand
  4. $number = Number::forHumans(489939);
  5. // 490 thousand
  6. $number = Number::forHumans(1230000, precision: 2);
  7. // 1.23 million

Number::format()

Number::format メソッドは、指定された数値をロケール固有の文字列にフォーマットします:

  1. use Illuminate\Support\Number;
  2. $number = Number::format(100000);
  3. // 100,000
  4. $number = Number::format(100000, precision: 2);
  5. // 100,000.00
  6. $number = Number::format(100000.123, maxPrecision: 2);
  7. // 100,000.12
  8. $number = Number::format(100000, locale: 'de');
  9. // 100.000

Number::ordinal()

Number::ordinal メソッドは、数値の序数表現を返します:

  1. use Illuminate\Support\Number;
  2. $number = Number::ordinal(1);
  3. // 1st
  4. $number = Number::ordinal(2);
  5. // 2nd
  6. $number = Number::ordinal(21);
  7. // 21st

Number::pairs()

Number::pairs メソッドは、指定された範囲とステップ値に基づいて数値ペア(サブ範囲)の配列を生成します。このメソッドは、ページネーションやタスクのバッチ処理などのために、大きな数値範囲を小さく管理しやすいサブ範囲に分割するのに役立ちます。pairs メソッドは、各内部配列が数値のペア(サブ範囲)を表す配列を返します:

  1. use Illuminate\Support\Number;
  2. $result = Number::pairs(25, 10);
  3. // [[1, 10], [11, 20], [21, 25]]
  4. $result = Number::pairs(25, 10, offset: 0);
  5. // [[0, 10], [10, 20], [20, 25]]

Number::percentage()

Number::percentage メソッドは、指定された値のパーセンテージ表現を文字列として返します:

  1. use Illuminate\Support\Number;
  2. $percentage = Number::percentage(10);
  3. // 10%
  4. $percentage = Number::percentage(10, precision: 2);
  5. // 10.00%
  6. $percentage = Number::percentage(10.123, maxPrecision: 2);
  7. // 10.12%
  8. $percentage = Number::percentage(10, precision: 2, locale: 'de');
  9. // 10,00%

ヘルパー

Number::trim()

Number::trim メソッドは、指定された数値の小数点以下の末尾のゼロを削除します:

  1. use Illuminate\Support\Number;
  2. $number = Number::trim(12.0);
  3. // 12
  4. $number = Number::trim(12.30);
  5. // 12.3

Number::useLocale()

Number::useLocale メソッドは、デフォルトの数値ロケールをグローバルに設定し、その後の Number クラスのメソッドによる数値と通貨のフォーマットに影響を与えます:

  1. use Illuminate\Support\Number;
  2. /**
  3. * Bootstrap any application services.
  4. */
  5. public function boot(): void
  6. {
  7. Number::useLocale('de');
  8. }

Number::withLocale()

Number::withLocale メソッドは、指定されたロケールを使用して指定されたクロージャを実行し、コールバックが実行された後に元のロケールを復元します:

  1. use Illuminate\Support\Number;
  2. $number = Number::withLocale('de', function () {
  3. return Number::format(1500);
  4. });

パス

app_path()

app_path 関数は、アプリケーションの app ディレクトリへの完全修飾パスを返します。アプリケーションディレクトリに対してファイルへの完全修飾パスを生成するには、app_path 関数を使用することもできます:

  1. $path = app_path();
  2. $path = app_path('Http/Controllers/Controller.php');

base_path()

base_path 関数は、アプリケーションのルートディレクトリへの完全修飾パスを返します。プロジェクトのルートディレクトリに対して指定されたファイルへの完全修飾パスを生成するには、base_path 関数を使用することもできます:

  1. $path = base_path();
  2. $path = base_path('vendor/bin');

config_path()

config_path 関数は、アプリケーションの config ディレクトリへの完全修飾パスを返します。アプリケーションの設定ディレクトリ内の指定されたファイルへの完全修飾パスを生成するには、config_path 関数を使用することもできます:

  1. $path = config_path();
  2. $path = config_path('app.php');

database_path()

database_path 関数は、アプリケーションの database ディレクトリへの完全修飾パスを返します。データベースディレクトリ内の指定されたファイルへの完全修飾パスを生成するには、database_path 関数を使用することもできます:

  1. $path = database_path();
  2. $path = database_path('factories/UserFactory.php');

lang_path()

lang_path 関数は、アプリケーションの lang ディレクトリへの完全修飾パスを返します。指定されたファイルへの完全修飾パスを生成するには、lang_path 関数を使用することもできます:

  1. $path = lang_path();
  2. $path = lang_path('en/messages.php');

デフォルトでは、Laravel アプリケーションのスケルトンには lang ディレクトリは含まれていません。Laravel の言語ファイルをカスタマイズしたい場合は、lang:publish Artisan コマンドを介して公開できます。

mix()

mix 関数は、バージョン管理された Mix ファイル:

  1. $path = mix('css/app.css');

public_path()

public_path 関数は、アプリケーションの public ディレクトリへの完全修飾パスを返します。指定されたファイルへの完全修飾パスを生成するには、public_path 関数を使用することもできます:

  1. $path = public_path();
  2. $path = public_path('css/app.css');

resource_path()

resource_path 関数は、アプリケーションの resources ディレクトリへの完全修飾パスを返します。指定されたファイルへの完全修飾パスを生成するには、resource_path 関数を使用することもできます:

  1. $path = resource_path();
  2. $path = resource_path('sass/app.scss');

storage_path()

storage_path 関数は、アプリケーションの storage ディレクトリへの完全修飾パスを返します。指定されたファイルへの完全修飾パスを生成するには、storage_path 関数を使用することもできます:

  1. $path = storage_path();
  2. $path = storage_path('app/file.txt');

URL

action()

action 関数は、指定されたコントローラーアクションの URL を生成します:

  1. use App\Http\Controllers\HomeController;
  2. $url = action([HomeController::class, 'index']);

メソッドがルートパラメータを受け入れる場合は、第二引数として渡すことができます:

  1. $url = action([UserController::class, 'profile'], ['id' => 1]);

asset()

asset 関数は、リクエストの現在のスキーム(HTTP または HTTPS)を使用してアセットの URL を生成します:

  1. $url = asset('img/photo.jpg');

アセット URL ホストを設定するには、ASSET_URL 変数を .env ファイルに設定します。これは、アセットを Amazon S3 や他の CDN などの外部サービスにホストする場合に便利です:

  1. // ASSET_URL=http://example.com/assets
  2. $url = asset('img/photo.jpg'); // http://example.com/assets/img/photo.jpg

route()

route 関数は、指定された 名前付きルート の URL を生成します:

  1. $url = route('route.name');

ルートがパラメータを受け入れる場合は、第二引数として渡すことができます:

  1. $url = route('route.name', ['id' => 1]);

デフォルトでは、route 関数は絶対 URL を生成します。相対 URL を生成したい場合は、関数の第三引数として false を渡すことができます:

  1. $url = route('route.name', ['id' => 1], false);

secure_asset()

secure_asset 関数は、HTTPS を使用してアセットの URL を生成します:

  1. $url = secure_asset('img/photo.jpg');

secure_url()

secure_url 関数は、指定されたパスへの完全修飾 HTTPS URL を生成します。追加の URL セグメントは、関数の第二引数に渡すことができます:

  1. $url = secure_url('user/profile');
  2. $url = secure_url('user/profile', [1]);

to_route()

to_route 関数は、指定された 名前付きルートリダイレクト HTTP レスポンス を生成します:

  1. return to_route('users.show', ['user' => 1]);

必要に応じて、リダイレクトに割り当てるべき HTTP ステータスコードと、追加のレスポンスヘッダーを to_route メソッドの第三および第四引数として渡すことができます:

  1. return to_route('users.show', ['user' => 1], 302, ['X-Framework' => 'Laravel']);

url()

url 関数は、指定されたパスへの完全修飾 URL を生成します:

  1. $url = url('user/profile');
  2. $url = url('user/profile', [1]);

パスが提供されていない場合、Illuminate\Routing\UrlGenerator インスタンスが返されます:

  1. $current = url()->current();
  2. $full = url()->full();
  3. $previous = url()->previous();

その他

abort()

abort 関数は HTTP例外 をスローし、例外ハンドラー によってレンダリングされます:

  1. abort(403);

例外のメッセージとブラウザに送信されるカスタムHTTPレスポンスヘッダーを提供することもできます:

  1. abort(403, 'Unauthorized.', $headers);

abort_if()

abort_if 関数は、指定されたブール式が true に評価される場合にHTTP例外をスローします:

  1. abort_if(! Auth::user()->isAdmin(), 403);

abort メソッドと同様に、例外のレスポンステキストを第3引数として、カスタムレスポンスヘッダーの配列を第4引数として関数に提供することもできます。

abort_unless()

abort_unless 関数は、指定されたブール式が false に評価される場合にHTTP例外をスローします:

  1. abort_unless(Auth::user()->isAdmin(), 403);

abort メソッドと同様に、例外のレスポンステキストを第3引数として、カスタムレスポンスヘッダーの配列を第4引数として関数に提供することもできます。

app()

app 関数は サービスコンテナ インスタンスを返します:

  1. $container = app();

クラスまたはインターフェース名を渡して、コンテナから解決することができます:

  1. $api = app('HelpSpot\API');

auth()

auth 関数は 認証者 インスタンスを返します。 Auth ファサードの代わりに使用できます:

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

必要に応じて、アクセスしたいガードインスタンスを指定できます:

  1. $user = auth('admin')->user();

back()

back 関数は、ユーザーの前の位置への リダイレクトHTTPレスポンス を生成します:

  1. return back($status = 302, $headers = [], $fallback = '/');
  2. return back();

bcrypt()

bcrypt 関数は、指定された値を Bcrypt を使用して ハッシュ化 します。この関数は Hash ファサードの代わりに使用できます:

  1. $password = bcrypt('my-secret-password');

blank()

blank 関数は、指定された値が「空」であるかどうかを判断します:

  1. blank('');
  2. blank(' ');
  3. blank(null);
  4. blank(collect());
  5. // true
  6. blank(0);
  7. blank(true);
  8. blank(false);
  9. // false

blank の逆については、filled メソッドを参照してください。

broadcast()

broadcast 関数は、指定された イベント をリスナーに ブロードキャスト します:

  1. broadcast(new UserRegistered($user));
  2. broadcast(new UserRegistered($user))->toOthers();

cache()

cache 関数は、キャッシュ から値を取得するために使用できます。指定されたキーがキャッシュに存在しない場合、オプションのデフォルト値が返されます:

  1. $value = cache('key');
  2. $value = cache('key', 'default');

キー/値ペアの配列を関数に渡すことで、キャッシュにアイテムを追加できます。キャッシュされた値が有効と見なされる秒数または期間も渡す必要があります:

  1. cache(['key' => 'value'], 300);
  2. cache(['key' => 'value'], now()->addSeconds(10));

class_uses_recursive()

class_uses_recursive 関数は、クラスによって使用されるすべてのトレイトを返します。親クラスによって使用されるトレイトも含まれます:

  1. $traits = class_uses_recursive(App\Models\User::class);

collect()

collect 関数は、指定された値から コレクション インスタンスを作成します:

  1. $collection = collect(['taylor', 'abigail']);

config()

config 関数は、設定 変数の値を取得します。設定値は「ドット」構文を使用してアクセスでき、ファイル名とアクセスしたいオプションが含まれます。デフォルト値を指定することもでき、設定オプションが存在しない場合はそれが返されます:

  1. $value = config('app.timezone');
  2. $value = config('app.timezone', $default);

実行時にキー/値ペアの配列を渡すことで設定変数を設定できます。ただし、この関数は現在のリクエストの設定値にのみ影響し、実際の設定値を更新しないことに注意してください:

  1. config(['app.debug' => true]);

context()

context 関数は、現在のコンテキスト から値を取得します。コンテキストキーが存在しない場合は、デフォルト値を指定することができ、それが返されます:

  1. $value = context('trace_id');
  2. $value = context('trace_id', $default);

キー/値ペアの配列を渡すことでコンテキスト値を設定できます:

  1. use Illuminate\Support\Str;
  2. context(['trace_id' => Str::uuid()->toString()]);

cookie 関数は、新しい クッキー インスタンスを作成します:

  1. $cookie = cookie('name', 'value', $minutes);

csrf_field()

csrf_field 関数は、CSRFトークンの値を含むHTML hidden 入力フィールドを生成します。例えば、Blade構文 を使用して:

  1. {{ csrf_field() }}

csrf_token()

csrf_token 関数は、現在のCSRFトークンの値を取得します:

  1. $token = csrf_token();

decrypt()

decrypt 関数は、指定された値を 復号化 します。この関数は Crypt ファサードの代わりに使用できます:

  1. $password = decrypt($value);

dd()

dd 関数は、指定された変数をダンプし、スクリプトの実行を終了します:

  1. dd($value);
  2. dd($value1, $value2, $value3, ...);

スクリプトの実行を停止したくない場合は、dump 関数を代わりに使用してください。

dispatch()

dispatch 関数は、指定された ジョブ をLaravelの ジョブキュー にプッシュします:

  1. dispatch(new App\Jobs\SendEmails);

dispatch_sync()

dispatch_sync 関数は、指定されたジョブを 同期 キューにプッシュし、即座に処理されるようにします:

  1. dispatch_sync(new App\Jobs\SendEmails);

dump()

dump 関数は、指定された変数をダンプします:

  1. dump($value);
  2. dump($value1, $value2, $value3, ...);

変数をダンプした後にスクリプトの実行を停止したい場合は、dd 関数を代わりに使用してください。

encrypt()

encrypt 関数は、指定された値を 暗号化 します。この関数は Crypt ファサードの代わりに使用できます:

  1. $secret = encrypt('my-secret-value');

env()

env 関数は、環境変数 の値を取得するか、デフォルト値を返します:

  1. $env = env('APP_ENV');
  2. $env = env('APP_ENV', 'production');

デプロイプロセス中に config:cache コマンドを実行する場合は、設定ファイル内からのみ env 関数を呼び出していることを確認してください。設定がキャッシュされると、.env ファイルは読み込まれず、env 関数へのすべての呼び出しは null を返します。

event()

event 関数は、指定された イベント をリスナーにディスパッチします:

  1. event(new UserRegistered($user));

fake()

fake 関数は、コンテナから Faker シングルトンを解決します。これは、モデルファクトリ、データベースシーディング、テスト、プロトタイピングビューでフェイクデータを作成する際に便利です:

  1. @for($i = 0; $i < 10; $i++)
  2. <dl>
  3. <dt>Name</dt>
  4. <dd>{{ fake()->name() }}</dd>
  5. <dt>Email</dt>
  6. <dd>{{ fake()->unique()->safeEmail() }}</dd>
  7. </dl>
  8. @endfor

デフォルトでは、fake 関数は app.faker_locale 設定オプションを利用します。通常、この設定オプションは APP_FAKER_LOCALE 環境変数を介して設定されます。ロケールを指定するには、fake 関数に渡すこともできます。各ロケールは個別のシングルトンを解決します:

  1. fake('nl_NL')->name()

filled()

filled 関数は、指定された値が「空」でないかどうかを判断します:

  1. filled(0);
  2. filled(true);
  3. filled(false);
  4. // true
  5. filled('');
  6. filled(' ');
  7. filled(null);
  8. filled(collect());
  9. // false

filled の逆については、blank メソッドを参照してください。

info()

info 関数は、アプリケーションの ログ に情報を書き込みます:

  1. info('Some helpful information!');

コンテキストデータの配列も関数に渡すことができます:

  1. info('User login attempt failed.', ['id' => $user->id]);

literal()

literal 関数は、指定された名前付き引数をプロパティとして持つ新しい stdClass インスタンスを作成します:

  1. $obj = literal(
  2. name: 'Joe',
  3. languages: ['PHP', 'Ruby'],
  4. );
  5. $obj->name; // 'Joe'
  6. $obj->languages; // ['PHP', 'Ruby']

logger()

logger 関数は、ログdebug レベルのメッセージを書き込むために使用できます:

  1. logger('Debug message');

コンテキストデータの配列も関数に渡すことができます:

  1. logger('User has logged in.', ['id' => $user->id]);

値が関数に渡されない場合、ロガー インスタンスが返されます:

  1. logger()->error('You are not allowed here.');

method_field()

method_field 関数は、フォームのHTTP動詞の偽の値を含むHTML hidden 入力フィールドを生成します。例えば、Blade構文 を使用して:

  1. <form method="POST">
  2. {{ method_field('DELETE') }}
  3. </form>

now()

now 関数は、現在の時間の新しい Illuminate\Support\Carbon インスタンスを作成します:

  1. $now = now();

old()

old 関数は、セッションにフラッシュされた 古い入力 値を 取得 します:

  1. $value = old('value');
  2. $value = old('value', 'default');

「デフォルト値」として old 関数に渡される第2引数は、しばしばEloquentモデルの属性であるため、Laravelでは、old 関数にEloquentモデル全体を第2引数として渡すことができます。そうすることで、Laravelは、old 関数に提供された最初の引数が「デフォルト値」と見なされるEloquent属性の名前であると仮定します:

  1. {{ old('name', $user->name) }}
  2. // Is equivalent to...
  3. {{ old('name', $user) }}

once()

once 関数は、指定されたコールバックを実行し、その結果をリクエストの期間中メモリにキャッシュします。同じコールバックで once 関数を呼び出すと、以前にキャッシュされた結果が返されます:

  1. function random(): int
  2. {
  3. return once(function () {
  4. return random_int(1, 1000);
  5. });
  6. }
  7. random(); // 123
  8. random(); // 123 (cached result)
  9. random(); // 123 (cached result)

once 関数がオブジェクトインスタンス内から実行されると、キャッシュされた結果はそのオブジェクトインスタンスに固有のものになります:

  1. <?php
  2. class NumberService
  3. {
  4. public function all(): array
  5. {
  6. return once(fn () => [1, 2, 3]);
  7. }
  8. }
  9. $service = new NumberService;
  10. $service->all();
  11. $service->all(); // (cached result)
  12. $secondService = new NumberService;
  13. $secondService->all();
  14. $secondService->all(); // (cached result)

optional()

optional 関数は任意の引数を受け入れ、そのオブジェクトのプロパティにアクセスしたりメソッドを呼び出したりできます。指定されたオブジェクトが null の場合、プロパティとメソッドはエラーを引き起こすのではなく null を返します:

  1. return optional($user->address)->street;
  2. {!! old('name', optional($user)->name) !!}

optional 関数は、2番目の引数としてクロージャも受け入れます。最初の引数として提供された値がnullでない場合、クロージャが呼び出されます:

  1. return optional(User::find($id), function (User $user) {
  2. return $user->name;
  3. });

policy()

policy メソッドは、指定されたクラスの ポリシー インスタンスを取得します:

  1. $policy = policy(App\Models\User::class);

redirect()

redirect 関数は、リダイレクトHTTPレスポンス を返すか、引数なしで呼び出された場合はリダイレクターインスタンスを返します:

  1. return redirect($to = null, $status = 302, $headers = [], $https = null);
  2. return redirect('/home');
  3. return redirect()->route('route.name');

report()

report 関数は、例外ハンドラー を使用して例外を報告します:

  1. report($e);

report 関数は文字列を引数として受け入れることもできます。文字列が関数に渡されると、関数はその文字列をメッセージとして持つ例外を作成します:

  1. report('Something went wrong.');

report_if()

report_if 関数は、指定された条件が true の場合に、例外ハンドラー を使用して例外を報告します:

  1. report_if($shouldReport, $e);
  2. report_if($shouldReport, 'Something went wrong.');

report_unless()

report_unless 関数は、指定された条件が false の場合に、例外ハンドラー を使用して例外を報告します:

  1. report_unless($reportingDisabled, $e);
  2. report_unless($reportingDisabled, 'Something went wrong.');

request()

request 関数は、現在の リクエスト インスタンスを返すか、現在のリクエストから入力フィールドの値を取得します:

  1. $request = request();
  2. $value = request('key', $default);

rescue()

rescue 関数は、指定されたクロージャを実行し、その実行中に発生した例外をキャッチします。キャッチされたすべての例外は、例外ハンドラー に送信されますが、リクエストは処理を続けます:

  1. return rescue(function () {
  2. return $this->method();
  3. });

rescue 関数に第2引数を渡すこともできます。この引数は、クロージャの実行中に例外が発生した場合に返される「デフォルト」値になります:

  1. return rescue(function () {
  2. return $this->method();
  3. }, false);
  4. return rescue(function () {
  5. return $this->method();
  6. }, function () {
  7. return $this->failure();
  8. });

report 引数を rescue 関数に提供して、例外が report 関数を介して報告されるべきかどうかを判断できます:

  1. return rescue(function () {
  2. return $this->method();
  3. }, report: function (Throwable $throwable) {
  4. return $throwable instanceof InvalidArgumentException;
  5. });

resolve()

resolve 関数は、サービスコンテナ を使用して、指定されたクラスまたはインターフェース名をインスタンスに解決します:

  1. $api = resolve('HelpSpot\API');

response()

response 関数は、レスポンス インスタンスを作成するか、レスポンスファクトリのインスタンスを取得します:

  1. return response('Hello World', 200, $headers);
  2. return response()->json(['foo' => 'bar'], 200, $headers);

retry()

retry 関数は、指定されたコールバックを最大試行回数に達するまで実行しようとします。コールバックが例外をスローしない場合、その戻り値が返されます。コールバックが例外をスローした場合、自動的に再試行されます。最大試行回数を超えた場合、例外がスローされます:

  1. return retry(5, function () {
  2. // Attempt 5 times while resting 100ms between attempts...
  3. }, 100);

試行間のミリ秒数を手動で計算したい場合は、retry 関数に第3引数としてクロージャを渡すことができます:

  1. use Exception;
  2. return retry(5, function () {
  3. // ...
  4. }, function (int $attempt, Exception $exception) {
  5. return $attempt * 100;
  6. });

便利なことに、retry 関数に配列を最初の引数として提供できます。この配列は、次の試行間にスリープするミリ秒数を決定するために使用されます:

  1. return retry([100, 200], function () {
  2. // Sleep for 100ms on first retry, 200ms on second retry...
  3. });

特定の条件下でのみ再試行するには、retry 関数に第4引数としてクロージャを渡すことができます:

  1. use Exception;
  2. return retry(5, function () {
  3. // ...
  4. }, 100, function (Exception $exception) {
  5. return $exception instanceof RetryException;
  6. });

session()

session 関数は、セッション 値を取得または設定するために使用できます:

  1. $value = session('key');

キー/値ペアの配列を渡すことで値を設定できます:

  1. session(['chairs' => 7, 'instruments' => 3]);

値が関数に渡されない場合、セッションストアが返されます:

  1. $value = session()->get('key');
  2. session()->put('key', $value);

tap()

tap 関数は2つの引数を受け入れます: 任意の $value とクロージャ。$value はクロージャに渡され、その後 tap 関数によって返されます。クロージャの戻り値は無視されます:

  1. $user = tap(User::first(), function (User $user) {
  2. $user->name = 'taylor';
  3. $user->save();
  4. });

クロージャが tap 関数に渡されない場合、指定された $value の任意のメソッドを呼び出すことができます。呼び出すメソッドの戻り値は常に $value になります。メソッドが実際に定義で返すものに関係なく。例えば、Eloquent update メソッドは通常整数を返します。しかし、tap 関数を介して update メソッド呼び出しを連鎖させることで、メソッドがモデル自体を返すように強制できます:

  1. $user = tap($user)->update([
  2. 'name' => $name,
  3. 'email' => $email,
  4. ]);

クラスに tap メソッドを追加するには、Illuminate\Support\Traits\Tappable トレイトをクラスに追加します。このトレイトの tap メソッドは、唯一の引数としてクロージャを受け入れます。オブジェクトインスタンス自体がクロージャに渡され、その後 tap メソッドによって返されます:

  1. return $user->tap(function (User $user) {
  2. // ...
  3. });

throw_if()

throw_if 関数は、指定されたブール式が true に評価される場合に指定された例外をスローします:

  1. throw_if(! Auth::user()->isAdmin(), AuthorizationException::class);
  2. throw_if(
  3. ! Auth::user()->isAdmin(),
  4. AuthorizationException::class,
  5. 'You are not allowed to access this page.'
  6. );

throw_unless()

throw_unless 関数は、指定されたブール式が false に評価される場合に指定された例外をスローします:

  1. throw_unless(Auth::user()->isAdmin(), AuthorizationException::class);
  2. throw_unless(
  3. Auth::user()->isAdmin(),
  4. AuthorizationException::class,
  5. 'You are not allowed to access this page.'
  6. );

today()

today 関数は、現在の日付の新しい Illuminate\Support\Carbon インスタンスを作成します:

  1. $today = today();

trait_uses_recursive()

trait_uses_recursive 関数は、トレイトによって使用されるすべてのトレイトを返します:

  1. $traits = trait_uses_recursive(\Illuminate\Notifications\Notifiable::class);

transform()

transform 関数は、値が 空でない 場合に指定された値にクロージャを実行し、その戻り値を返します:

  1. $callback = function (int $value) {
  2. return $value * 2;
  3. };
  4. $result = transform(5, $callback);
  5. // 10

デフォルト値またはクロージャを第3引数として関数に渡すことができます。この値は、指定された値が空である場合に返されます:

  1. $result = transform(null, $callback, 'The value is blank');
  2. // The value is blank

validator()

validator 関数は、指定された引数で新しい バリデーター インスタンスを作成します。 Validator ファサードの代わりに使用できます:

  1. $validator = validator($data, $rules, $messages);

value()

value 関数は、与えられた値を返します。ただし、関数にクロージャを渡すと、クロージャが実行され、その戻り値が返されます:

  1. $result = value(true);
  2. // true
  3. $result = value(function () {
  4. return false;
  5. });
  6. // false

追加の引数を value 関数に渡すことができます。最初の引数がクロージャの場合、追加のパラメータは引数としてクロージャに渡され、それ以外は無視されます:

  1. $result = value(function (string $name) {
  2. return $name;
  3. }, 'Taylor');
  4. // 'Taylor'

view()

view 関数は、ビュー インスタンスを取得します:

  1. return view('auth.login');

with()

with 関数は、与えられた値を返します。関数に第2引数としてクロージャが渡されると、クロージャが実行され、その戻り値が返されます:

  1. $callback = function (mixed $value) {
  2. return is_numeric($value) ? $value * 2 : 0;
  3. };
  4. $result = with(5, $callback);
  5. // 10
  6. $result = with(null, $callback);
  7. // 0
  8. $result = with(5, null);
  9. // 5

when()

when 関数は、指定された条件が true に評価される場合に与えられた値を返します。そうでない場合は、null が返されます。関数に第2引数としてクロージャが渡されると、クロージャが実行され、その戻り値が返されます:

  1. $value = when(true, 'Hello World');
  2. $value = when(true, fn () => 'Hello World');

when 関数は、主にHTML属性を条件付きでレンダリングするために便利です:

  1. <div {!! when($condition, 'wire:poll="calculate"') !!}>
  2. ...
  3. </div>

その他のユーティリティ

ベンチマーキング

時々、アプリケーションの特定の部分のパフォーマンスを迅速にテストしたい場合があります。そのような場合、Benchmark サポートクラスを利用して、指定されたコールバックが完了するのにかかるミリ秒数を測定できます:

  1. <?php
  2. use App\Models\User;
  3. use Illuminate\Support\Benchmark;
  4. Benchmark::dd(fn () => User::find(1)); // 0.1 ms
  5. Benchmark::dd([
  6. 'Scenario 1' => fn () => User::count(), // 0.5 ms
  7. 'Scenario 2' => fn () => User::all()->count(), // 20.0 ms
  8. ]);

デフォルトでは、指定されたコールバックは1回(1回のイテレーション)実行され、その期間がブラウザ/コンソールに表示されます。

コールバックを複数回呼び出すには、メソッドの第2引数としてコールバックを呼び出す回数を指定できます。コールバックを複数回実行する場合、Benchmark クラスは、すべてのイテレーションでコールバックを実行するのにかかった平均ミリ秒数を返します:

  1. Benchmark::dd(fn () => User::count(), iterations: 10); // 0.5 ms

時には、コールバックの実行をベンチマークしながら、コールバックが返す値を取得したい場合があります。value メソッドは、コールバックが返す値とコールバックを実行するのにかかったミリ秒数を含むタプルを返します:

  1. [$count, $duration] = Benchmark::value(fn () => User::count());

日付

Laravel には、強力な日付と時間の操作ライブラリである Carbon が含まれています。新しい Carbon インスタンスを作成するには、now 関数を呼び出します。この関数は、Laravel アプリケーション内でグローバルに利用可能です:

  1. $now = now();

または、Illuminate\Support\Carbon クラスを使用して新しい Carbon インスタンスを作成できます:

  1. use Illuminate\Support\Carbon;
  2. $now = Carbon::now();

Carbon とその機能についての詳細な議論については、公式の Carbon ドキュメント を参照してください。

遅延関数

遅延関数は、コミュニティのフィードバックを集めている間、現在ベータ版です。

Laravel の キューイングジョブ は、バックグラウンド処理のためにタスクをキューに入れることを可能にしますが、時には、長時間実行されるキュー作業者を構成または維持することなく遅延させたい単純なタスクがあるかもしれません。

遅延関数は、HTTPレスポンスがユーザーに送信された後にクロージャの実行を遅延させることを可能にし、アプリケーションを迅速かつ応答性のあるものに保ちます。クロージャの実行を遅延させるには、単にクロージャを Illuminate\Support\defer 関数に渡します:

  1. use App\Services\Metrics;
  2. use Illuminate\Http\Request;
  3. use Illuminate\Support\Facades\Route;
  4. use function Illuminate\Support\defer;
  5. Route::post('/orders', function (Request $request) {
  6. // Create order...
  7. defer(fn () => Metrics::reportOrder($order));
  8. return $order;
  9. });

デフォルトでは、遅延関数は、Illuminate\Support\defer が呼び出されたHTTPレスポンス、Artisanコマンド、またはキューイングジョブが正常に完了した場合にのみ実行されます。これは、リクエストが 4xx または 5xx HTTPレスポンスを生成した場合、遅延関数は実行されないことを意味します。遅延関数を常に実行させたい場合は、遅延関数に always メソッドをチェーンすることができます:

  1. defer(fn () => Metrics::reportOrder($order))->always();

遅延関数のキャンセル

遅延関数が実行される前にキャンセルする必要がある場合は、forget メソッドを使用して、その名前で関数をキャンセルできます。遅延関数に名前を付けるには、Illuminate\Support\defer 関数に第2引数を提供します:

  1. defer(fn () => Metrics::report(), 'reportMetrics');
  2. defer()->forget('reportMetrics');

遅延関数の互換性

Laravel 10.x アプリケーションから Laravel 11.x にアップグレードした場合、アプリケーションのスケルトンに app/Http/Kernel.php ファイルがまだ含まれている場合は、カーネルの $middleware プロパティの先頭に InvokeDeferredCallbacks ミドルウェアを追加する必要があります:

  1. protected $middleware = [
  2. \Illuminate\Foundation\Http\Middleware\InvokeDeferredCallbacks::class,
  3. \App\Http\Middleware\TrustProxies::class,
  4. // ...
  5. ];

宝くじ

Laravel の宝くじクラスは、指定されたオッズに基づいてコールバックを実行するために使用できます。これは、受信リクエストのパーセンテージに対してのみコードを実行したい場合に特に便利です:

  1. use Illuminate\Support\Lottery;
  2. Lottery::odds(1, 20)
  3. ->winner(fn () => $user->won())
  4. ->loser(fn () => $user->lost())
  5. ->choose();

Laravel の宝くじクラスを他の Laravel 機能と組み合わせることができます。例えば、遅いクエリの小さなパーセンテージのみを例外ハンドラーに報告したい場合があります。また、宝くじクラスは呼び出し可能であるため、呼び出し可能なメソッドを受け入れる任意のメソッドにクラスのインスタンスを渡すことができます:

  1. use Carbon\CarbonInterval;
  2. use Illuminate\Support\Facades\DB;
  3. use Illuminate\Support\Lottery;
  4. DB::whenQueryingForLongerThan(
  5. CarbonInterval::seconds(2),
  6. Lottery::odds(1, 100)->winner(fn () => report('Querying > 2 seconds.')),
  7. );

宝くじのテスト

Laravel は、アプリケーションの宝くじの呼び出しを簡単にテストできるようにするためのいくつかのシンプルなメソッドを提供します:

  1. // Lottery will always win...
  2. Lottery::alwaysWin();
  3. // Lottery will always lose...
  4. Lottery::alwaysLose();
  5. // Lottery will win then lose, and finally return to normal behavior...
  6. Lottery::fix([true, false]);
  7. // Lottery will return to normal behavior...
  8. Lottery::determineResultsNormally();

パイプライン

Laravel の Pipeline ファサードは、指定された入力を一連の呼び出し可能なクラス、クロージャ、または呼び出し可能なメソッドを通して「パイプ」する便利な方法を提供します。各クラスは、入力を検査または変更し、パイプライン内の次の呼び出し可能メソッドを呼び出す機会を持ちます:

  1. use Closure;
  2. use App\Models\User;
  3. use Illuminate\Support\Facades\Pipeline;
  4. $user = Pipeline::send($user)
  5. ->through([
  6. function (User $user, Closure $next) {
  7. // ...
  8. return $next($user);
  9. },
  10. function (User $user, Closure $next) {
  11. // ...
  12. return $next($user);
  13. },
  14. ])
  15. ->then(fn (User $user) => $user);

ご覧のとおり、パイプライン内の各呼び出し可能クラスまたはクロージャには、入力と $next クロージャが提供されます。$next クロージャを呼び出すと、パイプライン内の次の呼び出し可能メソッドが呼び出されます。ご覧のとおり、これは ミドルウェア に非常に似ています。

パイプライン内の最後の呼び出し可能メソッドが $next クロージャを呼び出すと、then メソッドに提供された呼び出し可能メソッドが呼び出されます。通常、この呼び出し可能メソッドは、指定された入力を単に返します。

もちろん、前述のように、パイプラインにクロージャを提供することに制限されるわけではありません。呼び出し可能なクラスも提供できます。クラス名が提供されると、そのクラスはLaravel の サービスコンテナ を介してインスタンス化され、依存関係が呼び出し可能なクラスに注入されます:

  1. $user = Pipeline::send($user)
  2. ->through([
  3. GenerateProfilePhoto::class,
  4. ActivateSubscription::class,
  5. SendWelcomeEmail::class,
  6. ])
  7. ->then(fn (User $user) => $user);

スリープ

Laravel の Sleep クラスは、PHP のネイティブ sleep および usleep 関数の軽量ラッパーであり、テスト可能性を高めると同時に、時間を扱うための開発者に優しい API を提供します:

  1. use Illuminate\Support\Sleep;
  2. $waiting = true;
  3. while ($waiting) {
  4. Sleep::for(1)->second();
  5. $waiting = /* ... */;
  6. }

Sleep クラスは、さまざまな時間単位で作業するためのさまざまなメソッドを提供します:

  1. // Return a value after sleeping...
  2. $result = Sleep::for(1)->second()->then(fn () => 1 + 1);
  3. // Sleep while a given value is true...
  4. Sleep::for(1)->second()->while(fn () => shouldKeepSleeping());
  5. // Pause execution for 90 seconds...
  6. Sleep::for(1.5)->minutes();
  7. // Pause execution for 2 seconds...
  8. Sleep::for(2)->seconds();
  9. // Pause execution for 500 milliseconds...
  10. Sleep::for(500)->milliseconds();
  11. // Pause execution for 5,000 microseconds...
  12. Sleep::for(5000)->microseconds();
  13. // Pause execution until a given time...
  14. Sleep::until(now()->addMinute());
  15. // Alias of PHP's native "sleep" function...
  16. Sleep::sleep(2);
  17. // Alias of PHP's native "usleep" function...
  18. Sleep::usleep(5000);

時間単位を簡単に組み合わせるには、and メソッドを使用できます:

  1. Sleep::for(1)->second()->and(10)->milliseconds();

スリープのテスト

Sleep クラスや PHP のネイティブスリープ関数を利用するコードをテストする際、テストは実行を一時停止します。予想通り、これによりテストスイートは大幅に遅くなります。例えば、次のコードをテストしていると想像してみてください:

  1. $waiting = /* ... */;
  2. $seconds = 1;
  3. while ($waiting) {
  4. Sleep::for($seconds++)->seconds();
  5. $waiting = /* ... */;
  6. }

通常、このコードをテストするには 少なくとも 一秒かかります。幸いなことに、Sleep クラスを使用すると、テストスイートを迅速に保つために「フェイク」スリープを行うことができます:

  1. it('waits until ready', function () {
  2. Sleep::fake();
  3. // ...
  4. });
  1. public function test_it_waits_until_ready()
  2. {
  3. Sleep::fake();
  4. // ...
  5. }

Sleep クラスをフェイクすることで、実際の実行の一時停止がバイパスされ、テストが大幅に速くなります。

Sleep クラスがフェイクされた後、発生すべきだった「スリープ」に対してアサーションを行うことが可能です。これを示すために、実行を三回一時停止し、各一時停止が一秒ずつ増加するコードをテストしていると想像してみましょう。assertSequence メソッドを使用して、テストを迅速に保ちながら、コードが適切な時間「スリープ」したことをアサートできます:

  1. it('checks if ready three times', function () {
  2. Sleep::fake();
  3. // ...
  4. Sleep::assertSequence([
  5. Sleep::for(1)->second(),
  6. Sleep::for(2)->seconds(),
  7. Sleep::for(3)->seconds(),
  8. ]);
  9. }
  1. public function test_it_checks_if_ready_three_times()
  2. {
  3. Sleep::fake();
  4. // ...
  5. Sleep::assertSequence([
  6. Sleep::for(1)->second(),
  7. Sleep::for(2)->seconds(),
  8. Sleep::for(3)->seconds(),
  9. ]);
  10. }

もちろん、Sleep クラスはテスト時に使用できるさまざまな他のアサーションを提供します:

  1. use Carbon\CarbonInterval as Duration;
  2. use Illuminate\Support\Sleep;
  3. // Assert that sleep was called 3 times...
  4. Sleep::assertSleptTimes(3);
  5. // Assert against the duration of sleep...
  6. Sleep::assertSlept(function (Duration $duration): bool {
  7. return /* ... */;
  8. }, times: 1);
  9. // Assert that the Sleep class was never invoked...
  10. Sleep::assertNeverSlept();
  11. // Assert that, even if Sleep was called, no execution paused occurred...
  12. Sleep::assertInsomniac();

時々、アプリケーションコードでフェイクスリープが発生するたびにアクションを実行することが有用な場合があります。これを達成するために、whenFakingSleep メソッドにコールバックを提供することができます。次の例では、Laravel の 時間操作ヘルパー を使用して、各スリープの期間だけ時間を即座に進めます:

  1. use Carbon\CarbonInterval as Duration;
  2. $this->freezeTime();
  3. Sleep::fake();
  4. Sleep::whenFakingSleep(function (Duration $duration) {
  5. // Progress time when faking sleep...
  6. $this->travel($duration->totalMilliseconds)->milliseconds();
  7. });

時間を進めることは一般的な要件であるため、fake メソッドはテスト内でスリープする際に Carbon を同期させるための syncWithCarbon 引数を受け入れます:

  1. Sleep::fake(syncWithCarbon: true);
  2. $start = now();
  3. Sleep::for(1)->second();
  4. $start->diffForHumans(); // 1 second ago

Laravel は、実行を一時停止する際に内部的に Sleep クラスを使用します。例えば、retry ヘルパーはスリープ時に Sleep クラスを使用し、そのヘルパーを使用する際のテスト可能性を向上させます。