Документация Laravel 10.x
Здесь ты найдешь сниппеты по Laravel и полезные советы по веб-разработке.
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::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::sortRecursiveDesc Arr::toCssClasses Arr::toCssStyles Arr::undot Arr::where Arr::whereNotNull Arr::wrap data_fill data_get data_set data_forget head last
abort abort_if abort_unless app auth back bcrypt blank broadcast cache class_uses_recursive collect config cookie csrf_field csrf_token decrypt dd dispatch dispatch_sync dump encrypt env event fake filled info logger method_field now old 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
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', ], [ 'name' => 'Jane', 'department' => 'Marketing', ]]; $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, вы можете опубликовать их с помощью команды Artisanlang: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');
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
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
или встроенные функции сна 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
при ожидании, что позволяет улучшить тестирование при использовании этого вспомогательного метода.