1. Глубже в детали
  2. Вспомогательные средства

Присоединяйся к нашему Telegram сообществу @webblend!

Здесь ты найдешь сниппеты по Laravel и полезные советы по веб-разработке.

Введение

Laravel включает различные глобальные PHP-функции-помощники. Многие из этих функций используются самим фреймворком; однако вы вольны использовать их в своих собственных приложениях, если они вам удобны.

Доступные Методы

Массивы и Объекты

Пути

URLs

Разное

Массивы и Объекты

Arr::accessible()

Метод Arr::accessible определяет, доступно ли заданное значение как массив:

use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
 
$isAccessible = Arr::accessible(['a' => 1, 'b' => 2]);
 
// true
 
$isAccessible = Arr::accessible(new Collection);
 
// true
 
$isAccessible = Arr::accessible('abc');
 
// false
 
$isAccessible = Arr::accessible(new stdClass);
 
// false

Arr::add()

Метод Arr::add добавляет заданную пару ключ / значение в массив, если заданный ключ еще не существует в массиве или установлен в null:

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

Arr::collapse()

Метод Arr::collapse сливает массив массивов в один массив:

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

Arr::crossJoin()

Метод Arr::crossJoin выполняет кросс-джойн заданных массивов, возвращая декартово произведение со всеми возможными перестановками:

use Illuminate\Support\Arr;
 
$matrix = Arr::crossJoin([1, 2], ['a', 'b']);
 
/*
[
[1, 'a'],
[1, 'b'],
[2, 'a'],
[2, 'b'],
]
*/
 
$matrix = Arr::crossJoin([1, 2], ['a', 'b'], ['I', 'II']);
 
/*
[
[1, 'a', 'I'],
[1, 'a', 'II'],
[1, 'b', 'I'],
[1, 'b', 'II'],
[2, 'a', 'I'],
[2, 'a', 'II'],
[2, 'b', 'I'],
[2, 'b', 'II'],
]
*/

Arr::divide()

Метод Arr::divide возвращает два массива: один содержит ключи, а другой - значения заданного массива:

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

Arr::dot()

Метод Arr::dot выравнивает многомерный массив в массив одного уровня, используя нотацию "точка" для обозначения глубины:

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

Arr::except()

Метод Arr::except удаляет заданные пары ключ / значение из массива:

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

Arr::exists()

Метод Arr::exists проверяет, существует ли заданный ключ в предоставленном массиве:

use Illuminate\Support\Arr;
 
$array = ['name' => 'John Doe', 'age' => 17];
 
$exists = Arr::exists($array, 'name');
 
// true
 
$exists = Arr::exists($array, 'salary');
 
// false

Arr::first()

Метод Arr::first возвращает первый элемент массива, проходящий заданный тест на истинность:

use Illuminate\Support\Arr;
 
$array = [100, 200, 300];
 
$first = Arr::first($array, function (int $value, int $key) {
return $value >= 150;
});
 
// 200

Третий параметр метода также может быть передан в виде значения по умолчанию. Это значение будет возвращено, если ни одно значение не проходит тест на истинность:

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

Arr::flatten()

Метод Arr::flatten выравнивает многомерный массив в массив одного уровня:

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

Arr::forget()

Метод Arr::forget удаляет заданную пару ключ / значение из глубоко вложенного массива с использованием нотации "точка":

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

Arr::get()

Метод Arr::get извлекает значение из глубоко вложенного массива с использованием нотации "точка":

use Illuminate\Support\Arr;
 
$array = ['products' => ['desk' => ['price' => 100]]];
 
$price = Arr::get($array, 'products.desk.price');
 
// 100

Метод Arr::get также принимает значение по умолчанию, которое будет возвращено, если указанный ключ отсутствует в массиве:

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

Arr::has()

Метод Arr::has проверяет, существует ли заданный элемент или элементы в массиве с использованием нотации "точка":

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

Arr::hasAny()

Метод Arr::hasAny проверяет, существует ли хотя бы один элемент в заданном наборе в массиве с использованием нотации "точка":

use Illuminate\Support\Arr;
 
$array = ['product' => ['name' => 'Desk', 'price' => 100]];
 
$contains = Arr::hasAny($array, 'product.name');
 
// true
 
$contains = Arr::hasAny($array, ['product.name', 'product.discount']);
 
// true
 
$contains = Arr::hasAny($array, ['category', 'product.discount']);
 
// false

Arr::isAssoc()

Метод Arr::isAssoc возвращает true, если заданный массив является ассоциативным. Массив считается "ассоциативным", если у него нет последовательных числовых ключей, начиная с нуля:

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

Arr::isList()

Метод Arr::isList возвращает true, если ключи заданного массива являются последовательными целыми числами, начиная с нуля:

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

Arr::join()

Метод Arr::join объединяет элементы массива строкой. С использованием второго аргумента этого метода вы также можете указать строку объединения для последнего элемента массива:

use Illuminate\Support\Arr;
 
$array = ['Tailwind', 'Alpine', 'Laravel', 'Livewire'];
 
$joined = Arr::join($array, ', ');
 
// Tailwind, Alpine, Laravel, Livewire
 
$joined = Arr::join($array, ', ', ' and ');
 
// Tailwind, Alpine, Laravel and Livewire

Arr::keyBy()

Метод Arr::keyBy индексирует массив по заданному ключу. Если у нескольких элементов одинаковый ключ, в новом массиве появится только последний из них:

use Illuminate\Support\Arr;
 
$array = [
['product_id' => 'prod-100', 'name' => 'Desk'],
['product_id' => 'prod-200', 'name' => 'Chair'],
];
 
$keyed = Arr::keyBy($array, 'product_id');
 
/*
[
'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
]
*/

Arr::last()

Метод Arr::last возвращает последний элемент массива, проходящий заданный тест на истинность:

use Illuminate\Support\Arr;
 
$array = [100, 200, 300, 110];
 
$last = Arr::last($array, function (int $value, int $key) {
return $value >= 150;
});
 
// 300

Третий параметр метода может быть передан в виде значения по умолчанию. Это значение будет возвращено, если ни одно значение не проходит тест на истинность:

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

Arr::map()

Метод Arr::map итерирует по массиву и передает каждое значение и ключ заданной функции обратного вызова. Значение массива заменяется значением, возвращаемым функцией обратного вызова:

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

Arr::mapWithKeys()

Метод Arr::mapWithKeys итерирует по массиву и передает каждое значение заданной функции обратного вызова. Функция обратного вызова должна возвращать ассоциативный массив, содержащий единственную пару ключ / значение:

use Illuminate\Support\Arr;
 
$array = [
[
'name' => 'John',
'department' => 'Sales',
'email' => '[email protected]',
],
[
'name' => 'Jane',
'department' => 'Marketing',
'email' => '[email protected]',
]
];
 
$mapped = Arr::mapWithKeys($array, function (array $item, int $key) {
return [$item['email'] => $item['name']];
});
 
/*
[
'[email protected]' => 'John',
'[email protected]' => 'Jane',
]
*/

Arr::only()

Метод Arr::only возвращает только указанные пары ключ / значение из заданного массива:

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

Arr::pluck()

Метод Arr::pluck извлекает все значения для заданного ключа из массива:

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

Также можно указать, как вы хотите, чтобы получившийся список был проиндексирован:

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

Arr::prepend()

Метод Arr::prepend добавит элемент в начало массива:

use Illuminate\Support\Arr;
 
$array = ['one', 'two', 'three', 'four'];
 
$array = Arr::prepend($array, 'zero');
 
// ['zero', 'one', 'two', 'three', 'four']

При необходимости можно указать ключ, который должен быть использован для значения:

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

Arr::prependKeysWith()

Метод Arr::prependKeysWith добавляет префикс ко всем именам ключей ассоциативного массива:

use Illuminate\Support\Arr;
 
$array = [
'name' => 'Desk',
'price' => 100,
];
 
$keyed = Arr::prependKeysWith($array, 'product.');
 
/*
[
'product.name' => 'Desk',
'product.price' => 100,
]
*/

Arr::pull()

Метод Arr::pull возвращает и удаляет пару ключ / значение из массива:

use Illuminate\Support\Arr;
 
$array = ['name' => 'Desk', 'price' => 100];
 
$name = Arr::pull($array, 'name');
 
// $name: Desk
 
// $array: ['price' => 100]

Третий параметр метода может быть передан в виде значения по умолчанию. Это значение будет возвращено, если ключ не существует:

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

Arr::query()

Метод Arr::query преобразует массив в строку запроса:

use Illuminate\Support\Arr;
 
$array = [
'name' => 'Taylor',
'order' => [
'column' => 'created_at',
'direction' => 'desc'
]
];
 
Arr::query($array);
 
// name=Taylor&order[column]=created_at&order[direction]=desc

Arr::random()

Метод Arr::random возвращает случайное значение из массива:

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

Также можно указать количество элементов для возврата в качестве необязательного второго аргумента. Обратите внимание, что предоставление этого аргумента приведет к возврату массива, даже если требуется всего один элемент:

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

Arr::set()

Метод Arr::set устанавливает значение в глубоко вложенном массиве с использованием нотации "точка":

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

Arr::shuffle()

Метод Arr::shuffle случайным образом перемешивает элементы массива:

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

Arr::sort()

Метод Arr::sort сортирует массив по его значениям:

use Illuminate\Support\Arr;
 
$array = ['Desk', 'Table', 'Chair'];
 
$sorted = Arr::sort($array);
 
// ['Chair', 'Desk', 'Table']

Также можно сортировать массив по результатам заданной функции обратного вызова:

use Illuminate\Support\Arr;
 
$array = [
['name' => 'Desk'],
['name' => 'Table'],
['name' => 'Chair'],
];
 
$sorted = array_values(Arr::sort($array, function (array $value) {
return $value['name'];
}));
 
/*
[
['name' => 'Chair'],
['name' => 'Desk'],
['name' => 'Table'],
]
*/

Arr::sortDesc()

Метод Arr::sortDesc сортирует массив по убыванию его значений:

use Illuminate\Support\Arr;
 
$array = ['Desk', 'Table', 'Chair'];
 
$sorted = Arr::sortDesc($array);
 
// ['Table', 'Desk', 'Chair']

Также можно сортировать массив по результатам заданной функции обратного вызова:

use Illuminate\Support\Arr;
 
$array = [
['name' => 'Desk'],
['name' => 'Table'],
['name' => 'Chair'],
];
 
$sorted = array_values(Arr::sortDesc($array, function (array $value) {
return $value['name'];
}));
 
/*
[
['name' => 'Table'],
['name' => 'Desk'],
['name' => 'Chair'],
]
*/

Arr::sortRecursive()

Метод Arr::sortRecursive рекурсивно сортирует массив с использованием функции sort для числовых индексированных подмассивов и функции ksort для ассоциативных подмассивов:

use Illuminate\Support\Arr;
 
$array = [
['Roman', 'Taylor', 'Li'],
['PHP', 'Ruby', 'JavaScript'],
['one' => 1, 'two' => 2, 'three' => 3],
];
 
$sorted = Arr::sortRecursive($array);
 
/*
[
['JavaScript', 'PHP', 'Ruby'],
['one' => 1, 'three' => 3, 'two' => 2],
['Li', 'Roman', 'Taylor'],
]
*/

Если вы хотите, чтобы результаты были отсортированы по убыванию, вы можете использовать метод Arr::sortRecursiveDesc.

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

Arr::toCssClasses()

Метод Arr::toCssClasses условно компилирует строку CSS-классов. Метод принимает массив классов, где ключ массива содержит класс или классы, которые вы хотите добавить, а значение - логическое выражение. Если элемент массива имеет числовой ключ, он всегда будет включен в отображаемый список классов:

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

Arr::toCssStyles()

Метод Arr::toCssStyles условно компилирует строку стилей CSS. Метод принимает массив классов, где ключ массива содержит класс или классы, которые вы хотите добавить, а значение - логическое выражение. Если элемент массива имеет числовой ключ, он всегда будет включен в отображаемый список классов:

$hasColor = true;
 
$array = ['background-color: blue', 'color: blue' => $hasColor];
 
$classes = Arr::toCssStyles($array);
 
/*
'background-color: blue; color: blue;'
*/

Этот метод обеспечивает функциональность Laravel, позволяющую объединять классы с атрибутным мешком компонента Blade, а также директиву @class Blade.

Arr::undot()

Метод Arr::undot преобразует одномерный массив, использующий нотацию "точка", в многомерный массив:

use Illuminate\Support\Arr;
 
$array = [
'user.name' => 'Kevin Malone',
'user.occupation' => 'Accountant',
];
 
$array = Arr::undot($array);
 
// ['user' => ['name' => 'Kevin Malone', 'occupation' => 'Accountant']]

Arr::where()

Метод Arr::where фильтрует массив с использованием заданного замыкания:

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

Arr::whereNotNull()

Метод Arr::whereNotNull удаляет все значения null из заданного массива:

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

Arr::wrap()

Метод Arr::wrap оборачивает заданное значение в массив. Если заданное значение уже является массивом, оно будет возвращено без изменений:

use Illuminate\Support\Arr;
 
$string = 'Laravel';
 
$array = Arr::wrap($string);
 
// ['Laravel']

Если заданное значение - null, будет возвращен пустой массив:

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

data_fill()

Функция data_fill устанавливает отсутствующее значение во вложенном массиве или объекте с использованием нотации "точка":

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

Эта функция также принимает символы звездочки в качестве подстановочных знаков и заполнит цель соответственно:

$data = [
'products' => [
['name' => 'Desk 1', 'price' => 100],
['name' => 'Desk 2'],
],
];
 
data_fill($data, 'products.*.price', 200);
 
/*
[
'products' => [
['name' => 'Desk 1', 'price' => 100],
['name' => 'Desk 2', 'price' => 200],
],
]
*/

data_get()

Функция data_get извлекает значение из вложенного массива или объекта с использованием нотации "точка":

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

Функция data_get также принимает значение по умолчанию, которое будет возвращено, если указанный ключ не найден:

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

Функция также принимает символы звездочки в качестве подстановочных знаков, которые могут нацелить любой ключ массива или объекта:

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

data_set()

Функция data_set устанавливает значение во вложенном массиве или объекте с использованием нотации "точка":

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

Эта функция также принимает шаблоны с использованием звездочек и устанавливает значения в соответствии с целью:

$data = [
'products' => [
['name' => 'Desk 1', 'price' => 100],
['name' => 'Desk 2', 'price' => 150],
],
];
 
data_set($data, 'products.*.price', 200);
 
/*
[
'products' => [
['name' => 'Desk 1', 'price' => 200],
['name' => 'Desk 2', 'price' => 200],
],
]
*/

По умолчанию существующие значения перезаписываются. Если вы хотите установить значение только в том случае, если оно не существует, вы можете передать false в качестве четвертого аргумента функции:

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

data_forget()

Функция data_forget удаляет значение внутри вложенного массива или объекта с использованием "точечной" нотации:

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

Эта функция также принимает шаблоны с использованием звездочек и удаляет значения в соответствии с целью:

$data = [
'products' => [
['name' => 'Desk 1', 'price' => 100],
['name' => 'Desk 2', 'price' => 150],
],
];
 
data_forget($data, 'products.*.price');
 
/*
[
'products' => [
['name' => 'Desk 1'],
['name' => 'Desk 2'],
],
]
*/

head()

Функция head возвращает первый элемент в данном массиве:

$array = [100, 200, 300];
 
$first = head($array);
 
// 100

last()

Функция last возвращает последний элемент в данном массиве:

$array = [100, 200, 300];
 
$last = last($array);
 
// 300

Пути

app_path()

Функция app_path возвращает полный путь к каталогу app вашего приложения. Вы также можете использовать функцию app_path для генерации полного пути к файлу относительно каталога приложения:

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

base_path()

Функция base_path возвращает полный путь к корневому каталогу вашего приложения. Вы также можете использовать функцию base_path для генерации полного пути к заданному файлу относительно корневого каталога проекта:

$path = base_path();
 
$path = base_path('vendor/bin');

config_path()

Функция config_path возвращает полный путь к каталогу config вашего приложения. Вы также можете использовать функцию config_path для генерации полного пути к заданному файлу в каталоге конфигурации приложения:

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

database_path()

Функция database_path возвращает полный путь к каталогу database вашего приложения. Вы также можете использовать функцию database_path для генерации полного пути к заданному файлу в каталоге базы данных:

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

lang_path()

Функция lang_path возвращает полный путь к каталогу lang вашего приложения. Вы также можете использовать функцию lang_path для генерации полного пути к заданному файлу в каталоге:

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

Примечание По умолчанию каркас приложения Laravel не включает в себя каталог lang. Если вы хотите настроить языковые файлы Laravel, вы можете опубликовать их с помощью команды Artisan lang:publish.

mix()

Функция mix возвращает путь к версионному файлу Mix:

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

public_path()

Функция public_path возвращает полный путь к каталогу public вашего приложения. Вы также можете использовать функцию public_path для генерации полного пути к заданному файлу в публичном каталоге:

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

resource_path()

Функция resource_path возвращает полный путь к каталогу resources вашего приложения. Вы также можете использовать функцию resource_path для генерации полного пути к заданному файлу в каталоге ресурсов:

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

storage_path()

Функция storage_path возвращает полный путь к каталогу storage вашего приложения. Вы также можете использовать функцию storage_path для генерации полного пути к заданному файлу в каталоге хранилища:

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

URLs

action()

Функция action генерирует URL для указанного действия контроллера:

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

Если метод принимает параметры маршрута, вы можете передать их вторым аргументом методу:

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

asset()

Функция asset генерирует URL для ресурса, используя текущую схему запроса (HTTP или HTTPS):

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

Вы можете настроить хост URL ресурса, установив переменную ASSET_URL в вашем файле .env. Это может быть полезно, если вы размещаете свои ресурсы на внешнем сервисе, таком как Amazon S3 или другом CDN:

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

route()

Функция route генерирует URL для именованного маршрута:

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

Если маршрут принимает параметры, вы можете передать их вторым аргументом функции:

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

По умолчанию функция route генерирует абсолютный URL. Если вы хотите сгенерировать относительный URL, вы можете передать false в качестве третьего аргумента функции:

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

secure_asset()

Функция secure_asset генерирует URL для ресурса, используя HTTPS:

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

secure_url()

Функция secure_url генерирует полный URL с использованием HTTPS для указанного пути. Дополнительные сегменты URL могут быть переданы вторым аргументом функции:

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

to_route()

Функция to_route генерирует HTTP-ответ с перенаправлением для указанного именованного маршрута:

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

При необходимости вы можете передать код состояния HTTP, который должен быть назначен для перенаправления, а также любые дополнительные заголовки ответа в качестве третьего и четвертого аргументов метода to_route:

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

url()

Функция url генерирует полный URL для указанного пути:

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

Если путь не указан, возвращается экземпляр Illuminate\Routing\UrlGenerator:

$current = url()->current();
 
$full = url()->full();
 
$previous = url()->previous();

Разное

abort()

Функция abort вызывает исключение HTTP, которое будет обработано обработчиком исключений:

abort(403);

Также можно указать сообщение об исключении и настраиваемые заголовки HTTP-ответа, которые должны быть отправлены в браузер:

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

abort_if()

Функция abort_if вызывает исключение HTTP, если заданное булево выражение вычисляется в true:

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

Как и метод abort, вы также можете указать текст ответа и массив настраиваемых заголовков ответа в качестве третьего и четвертого аргументов функции.

abort_unless()

Функция abort_unless вызывает исключение HTTP, если заданное булево выражение вычисляется в false:

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

Как и метод abort, вы также можете указать текст ответа и массив настраиваемых заголовков ответа в качестве третьего и четвертого аргументов функции.

app()

Функция app возвращает экземпляр контейнера служб:

$container = app();

Вы можете передать имя класса или интерфейса для его разрешения из контейнера:

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

auth()

Функция auth возвращает экземпляр аутентификатора. Вы можете использовать ее в качестве альтернативы фасаду Auth:

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

При необходимости вы можете указать, с каким экземпляром стража вы хотели бы взаимодействовать:

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

back()

Функция back генерирует HTTP-ответ с перенаправлением к предыдущему местоположению пользователя:

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

bcrypt()

Функция bcrypt хеширует заданное значение с использованием Bcrypt. Вы можете использовать эту функцию в качестве альтернативы фасаду Hash:

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

blank()

Функция blank определяет, является ли заданное значение "пустым":

blank('');
blank(' ');
blank(null);
blank(collect());
 
// true
 
blank(0);
blank(true);
blank(false);
 
// false

Для инверсии blank см. метод filled.

broadcast()

Функция broadcast транслирует заданное событие своим слушателям:

broadcast(new UserRegistered($user));
 
broadcast(new UserRegistered($user))->toOthers();

cache()

Функцию cache можно использовать для получения значений из кеша. Если указанный ключ не существует в кеше, будет возвращено необязательное значение по умолчанию:

$value = cache('key');
 
$value = cache('key', 'default');

Вы можете добавлять элементы в кеш, передав массив пар ключ / значение в функцию. Вы также должны передать количество секунд или продолжительность, в течение которых значение кеша должно считаться допустимым:

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

class_uses_recursive()

Функция class_uses_recursive возвращает все трейты, используемые классом, включая трейты, используемые всеми его родительскими классами:

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

collect()

Функция collect создает экземпляр коллекции из заданного значения:

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

config()

Функция config получает значение переменной конфигурации. Значения конфигурации могут быть доступны с использованием нотации "точка", которая включает имя файла и опцию, к которой вы хотите получить доступ. Можно указать значение по умолчанию, которое будет возвращено, если опция конфигурации не существует:

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

Вы можете устанавливать переменные конфигурации во время выполнения, передав массив пар ключ / значение. Однако обратите внимание, что эта функция влияет только на значение конфигурации для текущего запроса и не обновляет ваши фактические значения конфигурации:

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

cookie()

Функция cookie создает новый экземпляр cookie:

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

csrf_field()

Функция csrf_field генерирует HTML-элемент hidden с значением токена CSRF. Например, с использованием синтаксиса Blade:

{{ csrf_field() }}

csrf_token()

Функция csrf_token извлекает значение текущего токена CSRF:

$token = csrf_token();

decrypt()

Функция decrypt расшифровывает заданное значение. Вы можете использовать эту функцию в качестве альтернативы фасаду Crypt:

$password = decrypt($value);

dd()

Функция dd выводит заданные переменные и завершает выполнение скрипта:

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

Если вы не хотите останавливать выполнение вашего скрипта, используйте функцию dump.

dispatch()

Функция dispatch добавляет заданную задачу в очередь задач Laravel (job queue):

dispatch(new App\Jobs\SendEmails);

dispatch_sync()

Функция dispatch_sync добавляет заданную задачу в синхронную очередь, чтобы она обрабатывалась немедленно:

dispatch_sync(new App\Jobs\SendEmails);

dump()

Функция dump выводит заданные переменные:

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

Если вы хотите остановить выполнение скрипта после вывода переменных, используйте функцию dd.

encrypt()

Функция encrypt шифрует заданное значение. Вы можете использовать эту функцию в качестве альтернативы фасаду Crypt:

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

env()

Функция env извлекает значение переменной среды или возвращает значение по умолчанию:

$env = env('APP_ENV');
 
$env = env('APP_ENV', 'production');

Внимание Если вы выполняете команду config:cache в процессе развертывания, убедитесь, что вы вызываете функцию env только в ваших файлах конфигурации. После кэширования конфигурации файл .env не будет загружен, и все вызовы функции env вернут null.

event()

Функция event отправляет заданное событие своим слушателям:

event(new UserRegistered($user));

fake()

Функция fake разрешает одиночник Faker из контейнера, что может быть полезно при создании фальшивых данных в фабриках моделей, заполнении базы данных, тестах и создании макетов представлений:

@for($i = 0; $i < 10; $i++)
<dl>
<dt>Name</dt>
<dd>{{ fake()->name() }}</dd>
 
<dt>Email</dt>
<dd>{{ fake()->unique()->safeEmail() }}</dd>
</dl>
@endfor

По умолчанию функция fake будет использовать параметр конфигурации app.faker_locale в вашем файле конфигурации config/app.php; однако вы также можете указать локаль, передав ее в функцию fake. Каждая локаль будет разрешать отдельный одиночник:

fake('nl_NL')->name()

filled()

Функция filled определяет, не является ли заданное значение "пустым":

filled(0);
filled(true);
filled(false);
 
// true
 
filled('');
filled(' ');
filled(null);
filled(collect());
 
// false

Для инверсии filled см. метод blank.

info()

Функция info записывает информацию в журнал вашего приложения:

info('Some helpful information!');

Также можно передать массив контекстных данных функции:

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

logger()

Функцию logger можно использовать для записи сообщения уровня debug в журнал:

logger('Debug message');

Также можно передать массив контекстных данных функции:

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

Будет возвращен экземпляр регистратора, если ни одно значение не передано функции:

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

method_field()

Функция method_field генерирует HTML-элемент hidden с поддельным значением HTTP-глагола формы. Например, с использованием синтаксиса Blade:

<form method="POST">
{{ method_field('DELETE') }}
</form>

now()

Функция now создает новый экземпляр Illuminate\Support\Carbon для текущего времени:

$now = now();

old()

Функция old извлекает значение старого ввода, сохраненное в сессии:

$value = old('value');
 
$value = old('value', 'default');

Поскольку "значение по умолчанию", предоставленное вторым аргументом функции old, часто является атрибутом модели Eloquent, Laravel позволяет вам просто передать всю модель Eloquent в качестве второго аргумента функции old. При этом Laravel будет предполагать, что первый аргумент, предоставленный функции old, - это имя атрибута Eloquent, которое должно рассматриваться как "значение по умолчанию":

{{ old('name', $user->name) }}
 
// Эквивалентно...
 
{{ old('name', $user) }}

optional()

Функция optional принимает любой аргумент и позволяет вам получать доступ к свойствам или вызывать методы этого объекта. Если переданное значение равно null, свойства и методы вернут null, а не вызовут ошибку:

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

Функция optional также принимает замыкание в качестве второго аргумента. Замыкание будет вызвано, если значение, предоставленное в качестве первого аргумента, не является null:

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

policy()

Метод policy извлекает экземпляр политики для заданного класса:

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

redirect()

Функция redirect возвращает HTTP-ответ с перенаправлением или возвращает экземпляр перенаправителя, если вызывается без аргументов:

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

report()

Функция report сообщит об исключении с использованием вашего обработчика исключений:

report($e);

Функция report также принимает строку в качестве аргумента. Если строка передается функции, функция создаст исключение с этой строкой в качестве сообщения:

report('Something went wrong.');

report_if()

Функция report_if сообщит об исключении с использованием вашего обработчика исключений, если заданное условие истинно:

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

report_unless()

Функция report_unless сообщит об исключении с использованием вашего обработчика исключений, если заданное условие ложно:

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

request()

Функция request возвращает текущий запрос или извлекает значение поля ввода из текущего запроса:

$request = request();
 
$value = request('key', $default);

rescue()

Функция rescue выполняет заданное замыкание и перехватывает любые исключения, возникающие во время его выполнения. Все перехваченные исключения будут отправлены в ваш обработчик исключений; однако запрос будет продолжен:

return rescue(function () {
return $this->method();
});

Вы также можете передать второй аргумент функции rescue. Этот аргумент будет "по умолчанию" значением, которое должно быть возвращено, если возникнет исключение во время выполнения замыкания:

return rescue(function () {
return $this->method();
}, false);
 
return rescue(function () {
return $this->method();
}, function () {
return $this->failure();
});

Аргумент report может быть предоставлен функции rescue для определения того, должно ли исключение быть передано через функцию report:

return rescue(function () {
return $this->method();
}, report: function (Throwable $throwable) {
return $throwable instanceof InvalidArgumentException;
});

resolve()

Функция resolve разрешает заданный класс или имя интерфейса в экземпляр с использованием контейнера зависимостей:

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

response()

Функция response создает экземпляр ответа или получает экземпляр фабрики ответов:

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

retry()

Функция retry пытается выполнить заданный обратный вызов до тех пор, пока не будет достигнут предел максимального числа попыток. Если обратный вызов не вызывает исключение, его возвращаемое значение будет возвращено. Если обратный вызов вызывает исключение, оно будет автоматически повторено. Если предел максимального числа попыток превышен, будет сгенерировано исключение:

return retry(5, function () {
// Попытка 5 раз с паузой в 100 мс между попытками...
}, 100);

Если вы хотите вручную рассчитать количество миллисекунд для ожидания между попытками, вы можете передать замыкание в качестве третьего аргумента функции retry:

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

Для удобства вы можете передать массив в качестве первого аргумента функции retry. Этот массив будет использоваться для определения того, сколько миллисекунд ждать между последующими попытками:

return retry([100, 200], function () {
// Пауза на 100 мс при первой повторной попытке, на 200 мс при второй...
});

Чтобы повторять только в определенных условиях, вы можете передать замыкание в качестве четвертого аргумента функции retry:

use Exception;
 
return retry(5, function () {
// ...
}, 100, function (Exception $exception) {
return $exception instanceof RetryException;
});

session()

Функция session может использоваться для получения или установки значений сессии:

$value = session('key');

Вы можете устанавливать значения, передав массив пар ключ / значение в функцию:

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

Хранилище сессий будет возвращено, если функции не передано значение:

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

tap()

Функция tap принимает два аргумента: произвольное значение $value и замыкание. $value будет передано в замыкание, а затем возвращено функцией tap. Возвращаемое значение замыкания не имеет значения:

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

Если замыкание не передается функции tap, вы можете вызвать любой метод в переданном $value. Возвращаемое значение вызываемого вами метода всегда будет $value, независимо от того, что метод фактически возвращает в своем определении. Например, метод Eloquent update обычно возвращает целое число. Тем не менее, мы можем заставить метод всегда возвращать модель, цепляя вызов метода update через функцию tap:

$user = tap($user)->update([
'name' => $name,
'email' => $email,
]);

Чтобы добавить метод tap в класс, вы можете добавить трейт Illuminate\Support\Traits\Tappable в класс. Метод tap этого трейта принимает замыкание как единственный аргумент. Экземпляр объекта будет передан замыканию, а затем возвращен функцией tap:

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

throw_if()

Функция throw_if вызывает заданное исключение, если заданное булево выражение оценивается как true:

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

throw_unless()

Функция throw_unless вызывает заданное исключение, если заданное булево выражение оценивается как false:

throw_unless(Auth::user()->isAdmin(), AuthorizationException::class);
 
throw_unless(
Auth::user()->isAdmin(),
AuthorizationException::class,
'You are not allowed to access this page.'
);

today()

Функция today создает новый экземпляр Illuminate\Support\Carbon для текущей даты:

$today = today();

trait_uses_recursive()

Функция trait_uses_recursive возвращает все трейты, используемые трейтом:

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

transform()

Функция transform выполняет замыкание над заданным значением, если значение не пусто, а затем возвращает возвращаемое значение замыкания:

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

В функцию также может быть передано значение по умолчанию или замыкание в качестве третьего аргумента. Это значение будет возвращено, если заданное значение будет пустым:

$result = transform(null, $callback, 'The value is blank');
 
// Значение пусто

validator()

Функция validator создает новый валидатор с заданными аргументами. Вы можете использовать его в качестве альтернативы фасаду Validator:

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

value()

Функция value возвращает значение, которое ей передано. Однако, если вы передадите замыкание функции, замыкание будет выполнено, и его возвращаемое значение будет возвращено:

$result = value(true);
 
// true
 
$result = value(function () {
return false;
});
 
// false

Дополнительные аргументы могут быть переданы в функцию value. Если первый аргумент - это замыкание, то дополнительные параметры будут переданы в замыкание в качестве аргументов, в противном случае они будут проигнорированы:

$result = value(function (string $name) {
return $name;
}, 'Taylor');
 
// 'Taylor'

view()

Функция view извлекает экземпляр представления:

return view('auth.login');

with()

Функция with возвращает значение, которое ей передано. Если вторым аргументом функции передается замыкание, то замыкание будет выполнено, и его возвращаемое значение будет возвращено:

$callback = function (mixed $value) {
return is_numeric($value) ? $value * 2 : 0;
};
 
$result = with(5, $callback);
 
// 10
 
$result = with(null, $callback);
 
// 0
 
$result = with(5, null);
 
// 5

Прочие Утилиты

Бенчмаркинг

Иногда вам может потребоваться быстро проверить производительность определенных частей вашего приложения. В таких случаях вы можете использовать класс поддержки Benchmark для измерения времени выполнения заданных обратных вызовов в миллисекундах:

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

По умолчанию заданные обратные вызовы будут выполнены один раз (одна итерация), и их длительность будет отображена в браузере / консоли.

Чтобы вызвать обратный вызов более одного раза, вы можете указать количество итераций, которое должно быть вызвано вторым аргументом метода. При выполнении обратного вызова более одного раза класс Benchmark вернет среднее количество миллисекунд, необходимое для выполнения обратного вызова за все итерации:

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

Иногда вы можете захотеть измерить выполнение обратного вызова, сохраняя при этом значение, возвращаемое обратным вызовом. Метод value вернет кортеж, содержащий значение, возвращенное обратным вызовом, и количество миллисекунд, необходимых для выполнения обратного вызова:

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

Даты

Laravel включает Carbon, мощную библиотеку для работы с датой и временем. Для создания нового экземпляра Carbon вы можете вызвать функцию now. Эта функция доступна глобально в вашем приложении Laravel:

$now = now();

Или вы можете создать новый экземпляр Carbon с использованием класса Illuminate\Support\Carbon:

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

Для более подробного обсуждения Carbon и его функций обратитесь к официальной документации Carbon.

Лотерея

Класс лотереи Laravel может использоваться для выполнения обратных вызовов на основе заданных шансов. Это может быть особенно полезно, когда вы хотите выполнить код только для определенного процента ваших входящих запросов:

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

Вы можете комбинировать класс лотереи Laravel с другими функциями Laravel. Например, вы можете захотеть сообщать только о небольшом проценте медленных запросов вашему обработчику исключений. И, поскольку класс лотереи вызываем, мы можем передать экземпляр класса в любой метод, принимающий вызываемые объекты:

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

Тестирование Лотерей

Laravel предоставляет несколько простых методов, позволяющих вам легко тестировать вызовы лотереи в вашем приложении:

// В лотерее всегда победа...
Lottery::alwaysWin();
 
// В лотерее всегда поражение...
Lottery::alwaysLose();
 
// Лотерея сначала выиграет, затем проиграет, и, наконец, вернется к нормальному поведению...
Lottery::fix([true, false]);
 
// Лотерея вернется к нормальному поведению...
Lottery::determineResultsNormally();

Пайплайн

Фасад Pipeline Laravel предоставляет удобный способ "трубить" заданный ввод через серию вызываемых классов, замыканий или вызываемых объектов, предоставляя каждому классу возможность проверять или изменять ввод и вызывать следующий вызываемый объект в конвейере:

use Closure;
use App\Models\User;
use Illuminate\Support\Facades\Pipeline;
 
$user = Pipeline::send($user)
->through([
function (User $user, Closure $next) {
// ...
 
return $next($user);
},
function (User $user, Closure $next) {
// ...
 
return $next($user);
},
])
->then(fn (User $user) => $user);

Как видно, каждому вызываемому классу или замыканию в конвейере предоставляются ввод и замыкание $next. Вызов замыкания $next вызовет следующий вызываемый объект в конвейере. Как вы, возможно, заметили, это очень похоже на промежуточное ПО.

Когда последний вызываемый объект в конвейере вызывает замыкание $next, вызывается предоставленный методу then вызываемый объект. Обычно этот вызываемый объект просто вернет данный ввод.

Конечно, как обсуждалось ранее, вы не ограничены предоставлением замыканий в ваш конвейер. Вы также можете предоставлять вызываемые классы. Если предоставлено имя класса, класс будет создан через контейнер зависимостей Laravel, что позволит внедрять зависимости в вызываемый класс:

$user = Pipeline::send($user)
->through([
GenerateProfilePhoto::class,
ActivateSubscription::class,
SendWelcomeEmail::class,
])
->then(fn (User $user) => $user);

Sleep

Класс Sleep Laravel - это легкий обертыватель вокруг встроенных функций sleep и usleep в PHP, предлагающий большую тестируемость, а также удобный API для работы со временем:

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

Класс Sleep предлагает различные методы, позволяющие работать с разными единицами времени:

// Приостановка выполнения на 90 секунд...
Sleep::for(1.5)->minutes();
 
// Приостановка выполнения на 2 секунды...
Sleep::for(2)->seconds();
 
// Приостановка выполнения на 500 миллисекунд...
Sleep::for(500)->milliseconds();
 
// Приостановка выполнения на 5 000 микросекунд...
Sleep::for(5000)->microseconds();
 
// Приостановка выполнения до заданного времени...
Sleep::until(now()->addMinute());
 
// Псевдоним встроенной функции \"sleep\" в PHP...
Sleep::sleep(2);
 
// Псевдоним встроенной функции \"usleep\" в PHP...
Sleep::usleep(5000);

Для легкости объединения единиц времени вы можете использовать метод and:

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

Тестирование Sleep

При тестировании кода, использующего класс Sleep или встроенные функции сна PHP, ваш тест приостановит выполнение. Как можно ожидать, это делает ваш набор тестов значительно медленнее. Например, представьте, что вы тестируете следующий код:

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

Обычно тестирование этого кода займет как минимум одну секунду. К счастью, класс Sleep позволяет нам "фальсифицировать" сон, чтобы наш набор тестов оставался быстрым:

public function test_it_waits_until_ready()
{
Sleep::fake();
 
// ...
}

При фальсификации класса Sleep фактическое приостановление выполнения обходится, что приводит к существенно более быстрым тестам.

После того как класс Sleep был фальсифицирован, можно проводить проверки ожидаемых "снов", которые должны были произойти. Для иллюстрации давайте представим, что мы тестируем код, который приостанавливает выполнение три раза, причем каждая пауза увеличивается на одну секунду. С использованием метода assertSequence мы можем утверждать, что наш код "спал" нужное количество времени, сохраняя при этом скорость тестирования:

public function test_it_checks_if_ready_four_times()
{
Sleep::fake();
 
// ...
 
Sleep::assertSequence([
Sleep::for(1)->second(),
Sleep::for(2)->seconds(),
Sleep::for(3)->seconds(),
]);
}

Конечно, класс Sleep предоставляет множество других утверждений, которые можно использовать при тестировании:

use Carbon\CarbonInterval as Duration;
use Illuminate\Support\Sleep;
 
// Проверка, что функция sleep вызывалась 3 раза...
Sleep::assertSleptTimes(3);
 
// Проверка продолжительности паузы...
Sleep::assertSlept(function (Duration $duration): bool {
return /* ... */;
}, times: 1);
 
// Проверка, что класс Sleep никогда не вызывался...
Sleep::assertNeverSlept();
 
// Проверка, что даже если вызывалась функция Sleep, пауза выполнения не произошла...
Sleep::assertInsomniac();

Иногда может быть полезно выполнять действие при каждом фальсификации сна в коде вашего приложения. Для достижения этого вы можете предоставить обратный вызов методу whenFakingSleep. В следующем примере мы используем вспомогательные методы управления временем Laravel, чтобы мгновенно продвигать время на продолжительность каждого сна:

use Carbon\CarbonInterval as Duration;
 
$this->freezeTime();
 
Sleep::fake();
 
Sleep::whenFakingSleep(function (Duration $duration) {
// Прогресс времени при имитации паузы...
$this->travel($duration->totalMilliseconds)->milliseconds();
});

Laravel использует класс Sleep внутренне, когда происходит приостановка выполнения. Например, вспомогательный метод retry использует класс Sleep при ожидании, что позволяет улучшить тестирование при использовании этого вспомогательного метода.