Хелпери (Helpers)
Вступ
Laravel включає різноманітні глобальні PHP-функції "хелперів". Багато з цих функцій використовуються самим фреймворком; однак, ви можете вільно використовувати їх у своїх власних застосунках, якщо вважаєте їх зручними.
Доступні методи
Масиви & Об'єкти
Arr::accessible Arr::add Arr::array Arr::boolean Arr::collapse Arr::crossJoin Arr::divide Arr::dot Arr::except Arr::exists Arr::first Arr::flatten Arr::float Arr::forget Arr::from Arr::get Arr::has Arr::hasAll Arr::hasAny Arr::integer Arr::isAssoc Arr::isList Arr::join Arr::keyBy Arr::last Arr::map Arr::mapSpread Arr::mapWithKeys Arr::only Arr::partition Arr::pluck Arr::prepend Arr::prependKeysWith Arr::pull Arr::query Arr::random Arr::reject Arr::select Arr::set Arr::shuffle Arr::sole Arr::sort Arr::sortDesc Arr::sortRecursive Arr::string Arr::take Arr::toCssClasses Arr::toCssStyles Arr::undot Arr::where Arr::whereNotNull Arr::wrap data_fill data_get data_set data_forget head last
Числа
Number::abbreviate Number::clamp Number::currency Number::defaultCurrency Number::defaultLocale Number::fileSize Number::forHumans Number::format Number::ordinal Number::pairs Number::parseInt Number::parseFloat Number::percentage Number::spell Number::spellOrdinal Number::trim Number::useLocale Number::withLocale Number::useCurrency Number::withCurrency
Шляхи
URLs
Різне
abort abort_if abort_unless app auth back bcrypt blank broadcast broadcast_if broadcast_unless cache class_uses_recursive collect config context cookie csrf_field csrf_token decrypt dd dispatch dispatch_sync dump encrypt env event fake filled info literal logger method_field now old once optional policy redirect report report_if report_unless request rescue resolve response retry session tap throw_if throw_unless today trait_uses_recursive transform validator value view with when
Масиви & Об'єкти
Arr::accessible()
Метод Arr::accessible визначає, чи є дане значення доступним як масив:
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::array()
Метод Arr::array отримує значення з глибоко вкладеного масиву, використовуючи "крапкову" нотацію (так само, як Arr::get()), але викидає InvalidArgumentException, якщо запитане значення не є array:
use Illuminate\Support\Arr; $array = ['name' => 'Joe', 'languages' => ['PHP', 'Ruby']]; $value = Arr::array($array, 'languages'); // ['PHP', 'Ruby'] $value = Arr::array($array, 'name'); // Генерує виняток InvalidArgumentException
Arr::boolean()
Метод Arr::boolean отримує значення з глибоко вкладеного масиву, використовуючи "крапкову" нотацію (так само, як Arr::get()), але викидає InvalidArgumentException, якщо запитане значення не є boolean:
use Illuminate\Support\Arr; $array = ['name' => 'Joe', 'available' => true]; $value = Arr::boolean($array, 'available'); // true $value = Arr::boolean($array, 'name'); // Генерує виняток InvalidArgumentException
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::float()
Метод Arr::float отримує значення з глибоко вкладеного масиву, використовуючи "крапкову" нотацію (так само, як Arr::get()), але викидає InvalidArgumentException, якщо запитане значення не є float:
use Illuminate\Support\Arr; $array = ['name' => 'Joe', 'balance' => 123.45]; $value = Arr::float($array, 'balance'); // 123.45 $value = Arr::float($array, 'name'); // Генерує виняток InvalidArgumentException
Arr::forget()
Метод Arr::forget видаляє задані пари ключ / значення з глибоко вкладеного масиву, використовуючи нотацію "крапка":
use Illuminate\Support\Arr;
$array = ['products' => ['desk' => ['price' => 100]]];
Arr::forget($array, 'products.desk');
// ['products' => []]
Arr::from()
Метод Arr::from перетворює різні типи вхідних даних у звичайний PHP масив. Він підтримує ряд типів вхідних даних, включаючи масиви, об'єкти та кілька загальних інтерфейсів Laravel, таких як Arrayable, Enumerable, Jsonable і JsonSerializable. Крім того, він обробляє екземпляри Traversable і WeakMap:
use Illuminate\Support\Arr;
Arr::from((object) ['foo' => 'bar']); // ['foo' => 'bar']
class TestJsonableObject implements Jsonable
{
public function toJson($options = 0)
{
return json_encode(['foo' => 'bar']);
}
}
Arr::from(new TestJsonableObject); // ['foo' => 'bar']
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 перевіряє, чи існує заданий елемент або елементи в масиві, використовуючи "dot" нотацію:
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::hasAll()
Метод Arr::hasAll визначає, чи існують усі вказані ключі в даному масиві, використовуючи нотацію "dot":
use Illuminate\Support\Arr;
$array = ['name' => 'Taylor', 'language' => 'PHP'];
Arr::hasAll($array, ['name']); // true
Arr::hasAll($array, ['name', 'language']); // true
Arr::hasAll($array, ['name', 'IDE']); // false
Arr::hasAny()
Метод Arr::hasAny перевіряє, чи існує будь-який елемент із заданого набору в масиві, використовуючи "dot" нотацію:
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::integer()
Метод Arr::integer отримує значення з глибоко вкладеного масиву, використовуючи "крапкову" нотацію (так само, як Arr::get()), але викидає InvalidArgumentException, якщо запитане значення не є int:
use Illuminate\Support\Arr; $array = ['name' => 'Joe', 'age' => 42]; $value = Arr::integer($array, 'age'); // 42 $value = Arr::integer($array, 'name'); // Генерує виняток InvalidArgumentException
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::mapSpread()
Метод Arr::mapSpread ітерується по масиву, передаючи кожне вкладене значення елемента у вказане замикання. Замикання може змінювати елемент і повертати його, таким чином формуючи новий масив змінених елементів:
use Illuminate\Support\Arr;
$array = [
[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9],
];
$mapped = Arr::mapSpread($array, function (int $even, int $odd) {
return $even + $odd;
});
/*
[1, 5, 9, 13, 17]
*/
Arr::mapWithKeys()
Метод Arr::mapWithKeys ітерується через масив і передає кожне значення в заданий зворотний виклик. Зворотний виклик повинен повертати асоціативний масив, що містить одну пару ключ / значення:
use Illuminate\Support\Arr;
$array = [
[
'name' => 'John',
'department' => 'Sales',
'email' => 'example@example.com',
],
[
'name' => 'Jane',
'department' => 'Marketing',
'email' => 'example@example.com',
]
];
$mapped = Arr::mapWithKeys($array, function (array $item, int $key) {
return [$item['email'] => $item['name']];
});
/*
[
'example@example.com' => 'John',
'example@example.com' => '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::partition()
Метод Arr::partition може бути поєднаний з деструктуризацією масивів PHP для розділення елементів, які проходять заданий тест на істинність, від тих, що не проходять:
<?php
use Illuminate\Support\Arr;
$numbers = [1, 2, 3, 4, 5, 6];
[$underThree, $equalOrAboveThree] = Arr::partition($numbers, function (int $i) {
return $i < 3;
});
dump($underThree);
// [1, 2]
dump($equalOrAboveThree);
// [3, 4, 5, 6]
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::reject()
Метод Arr::reject видаляє елементи з масиву, використовуючи надане замикання:
use Illuminate\Support\Arr;
$array = [100, '200', 300, '400', 500];
$filtered = Arr::reject($array, function (string|int $value, int $key) {
return is_string($value);
});
// [0 => 100, 2 => 300, 4 => 500]
Arr::select()
Метод Arr::select вибирає масив значень з масиву:
use Illuminate\Support\Arr;
$array = [
['id' => 1, 'name' => 'Desk', 'price' => 200],
['id' => 2, 'name' => 'Table', 'price' => 150],
['id' => 3, 'name' => 'Chair', 'price' => 300],
];
Arr::select($array, ['name', 'price']);
// [['name' => 'Desk', 'price' => 200], ['name' => 'Table', 'price' => 150], ['name' => 'Chair', 'price' => 300]]
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] - (згенеровано випадковим чином)
Arr::sole()
Метод Arr::sole отримує одне значення з масиву, використовуючи надане замикання. Якщо більше ніж одне значення в масиві відповідає наданому тесту істинності, буде викинуто виняток Illuminate\Support\MultipleItemsFoundException. Якщо жодне значення не відповідає тесту істинності, буде викинуто виняток Illuminate\Support\ItemNotFoundException:
use Illuminate\Support\Arr;
$array = ['Desk', 'Table', 'Chair'];
$value = Arr::sole($array, fn (string $value) => $value === 'Desk');
// 'Desk'
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::string()
Метод Arr::string отримує значення з глибоко вкладеного масиву, використовуючи "крапкову" нотацію (так само, як Arr::get()), але викидає InvalidArgumentException, якщо запитане значення не є string:
use Illuminate\Support\Arr; $array = ['name' => 'Joe', 'languages' => ['PHP', 'Ruby']]; $value = Arr::string($array, 'name'); // Joe $value = Arr::string($array, 'languages'); // Генерує виняток InvalidArgumentException
Arr::take()
Метод Arr::take повертає новий масив із вказаною кількістю елементів:
use Illuminate\Support\Arr;
$array = [0, 1, 2, 3, 4, 5];
$chunk = Arr::take($array, 3);
// [0, 1, 2]
Ви також можете передати від'ємне ціле число, щоб взяти вказану кількість елементів з кінця масиву:
$array = [0, 1, 2, 3, 4, 5];
$chunk = Arr::take($array, -2);
// [4, 5]
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. Метод приймає масив класів, де ключ масиву містить клас або класи, які ви бажаєте додати, а значення є булевим виразом. Якщо елемент масиву має числовий ключ, він завжди буде включений у згенерований список класів:
use Illuminate\Support\Arr;
$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'];
Заповнювачі {first} та {last} можуть бути використані для отримання першого або останнього елементів у масиві:
$flight = [
'segments' => [
['from' => 'LHR', 'departure' => '9:00', 'to' => 'IST', 'arrival' => '15:00'],
['from' => 'IST', 'departure' => '16:00', 'to' => 'PKX', 'arrival' => '20:00'],
],
];
data_get($flight, 'segments.{first}.arrival');
// 15:00
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
Числа
Number::abbreviate()
Метод Number::abbreviate повертає формат числового значення, зрозумілий для людини, з абревіатурою для одиниць:
use Illuminate\Support\Number;
$number = Number::abbreviate(1000);
// 1K
$number = Number::abbreviate(489939);
// 490K
$number = Number::abbreviate(1230000, precision: 2);
// 1.23M
Number::clamp()
Метод Number::clamp гарантує, що задане число залишається в межах вказаного діапазону. Якщо число менше мінімального, повертається мінімальне значення. Якщо число більше максимального, повертається максимальне значення:
use Illuminate\Support\Number;
$number = Number::clamp(105, min: 10, max: 100);
// 100
$number = Number::clamp(5, min: 10, max: 100);
// 10
$number = Number::clamp(10, min: 10, max: 100);
// 10
$number = Number::clamp(20, min: 10, max: 100);
// 20
Number::currency()
Метод Number::currency повертає валютне представлення заданого значення у вигляді рядка:
use Illuminate\Support\Number;
$currency = Number::currency(1000);
// $1,000.00
$currency = Number::currency(1000, in: 'EUR');
// €1,000.00
$currency = Number::currency(1000, in: 'EUR', locale: 'de');
// 1.000,00 €
$currency = Number::currency(1000, in: 'EUR', locale: 'de', precision: 0);
// 1.000 €
Number::defaultCurrency()
Метод Number::defaultCurrency повертає валюту за замовчуванням, яка використовується класом Number:
use Illuminate\Support\Number;
$currency = Number::defaultCurrency();
// USD
Number::defaultLocale()
Метод Number::defaultLocale повертає локаль за замовчуванням, яка використовується класом Number:
use Illuminate\Support\Number;
$locale = Number::defaultLocale();
// en
Number::fileSize()
Метод Number::fileSize повертає представлення розміру файлу заданого значення в байтах у вигляді рядка:
use Illuminate\Support\Number;
$size = Number::fileSize(1024);
// 1 KB
$size = Number::fileSize(1024 * 1024);
// 1 MB
$size = Number::fileSize(1024, precision: 2);
// 1.00 KB
Number::forHumans()
Метод Number::forHumans повертає формат числового значення, зручний для читання людиною:
use Illuminate\Support\Number; $number = Number::forHumans(1000); // 1 тисяча $number = Number::forHumans(489939); // 490 тисяч $number = Number::forHumans(1230000, precision: 2); // 1.23 мільйона
Number::format()
Метод Number::format форматує задане число у рядок, специфічний для локалі:
use Illuminate\Support\Number;
$number = Number::format(100000);
// 100,000
$number = Number::format(100000, precision: 2);
// 100,000.00
$number = Number::format(100000.123, maxPrecision: 2);
// 100,000.12
$number = Number::format(100000, locale: 'de');
// 100.000
Number::ordinal()
Метод Number::ordinal повертає порядкове представлення числа:
use Illuminate\Support\Number;
$number = Number::ordinal(1);
// 1st
$number = Number::ordinal(2);
// 2nd
$number = Number::ordinal(21);
// 21st
Number::pairs()
Метод Number::pairs генерує масив пар чисел (піддіапазонів) на основі заданого діапазону та кроку. Цей метод може бути корисним для поділу більшого діапазону чисел на менші, керовані піддіапазони для таких речей, як пагінація або пакетна обробка завдань. Метод pairs повертає масив масивів, де кожен внутрішній масив представляє пару (піддіапазон) чисел:
use Illuminate\Support\Number;
$result = Number::pairs(25, 10);
// [[0, 9], [10, 19], [20, 25]]
$result = Number::pairs(25, 10, offset: 0);
// [[0, 10], [10, 20], [20, 25]]
Number::parseInt()
Метод Number::parseInt перетворює рядок у ціле число відповідно до вказаної локалі:
use Illuminate\Support\Number;
$result = Number::parseInt('10.123');
// (int) 10
$result = Number::parseInt('10,123', locale: 'fr');
// (int) 10
Number::parseFloat()
Метод Number::parseFloat перетворює рядок у число з плаваючою комою відповідно до вказаної локалі:
use Illuminate\Support\Number;
$result = Number::parseFloat('10');
// (float) 10.0
$result = Number::parseFloat('10', locale: 'fr');
// (float) 10.0
Number::percentage()
Метод Number::percentage повертає відсоткове представлення заданого значення у вигляді рядка:
use Illuminate\Support\Number;
$percentage = Number::percentage(10);
// 10%
$percentage = Number::percentage(10, precision: 2);
// 10.00%
$percentage = Number::percentage(10.123, maxPrecision: 2);
// 10.12%
$percentage = Number::percentage(10, precision: 2, locale: 'de');
// 10,00%
Number::spell()
Метод Number::spell перетворює задане число на рядок слів:
use Illuminate\Support\Number; $number = Number::spell(102); // сто два $number = Number::spell(88, locale: 'fr'); // quatre-vingt-huit
Аргумент after дозволяє вказати значення, після якого всі числа повинні бути записані словами:
$number = Number::spell(10, after: 10);
// 10
$number = Number::spell(11, after: 10);
// eleven
Аргумент until дозволяє вказати значення, до якого всі числа повинні бути записані словами:
$number = Number::spell(5, until: 10);
// five
$number = Number::spell(10, until: 10);
// 10
Number::spellOrdinal()
Метод Number::spellOrdinal повертає порядкове представлення числа у вигляді рядка слів:
use Illuminate\Support\Number;
$number = Number::spellOrdinal(1);
// first
$number = Number::spellOrdinal(2);
// second
$number = Number::spellOrdinal(21);
// twenty-first
Number::trim()
Метод Number::trim видаляє будь-які нульові цифри, що йдуть після десяткової крапки в заданому числі:
use Illuminate\Support\Number;
$number = Number::trim(12.0);
// 12
$number = Number::trim(12.30);
// 12.3
Number::useLocale()
Метод Number::useLocale встановлює локаль чисел за замовчуванням глобально, що впливає на форматування чисел і валюти при подальших викликах методів класу Number:
use Illuminate\Support\Number; /** * Ініціалізувати будь-які сервіси застосунку. */ public function boot(): void { Number::useLocale('de'); }
Number::withLocale()
Метод Number::withLocale виконує надане замикання, використовуючи вказану локаль, а потім відновлює оригінальну локаль після виконання зворотного виклику:
use Illuminate\Support\Number;
$number = Number::withLocale('de', function () {
return Number::format(1500);
});
Number::useCurrency()
Метод Number::useCurrency встановлює валюту за замовчуванням глобально, що впливає на те, як валюта форматуватиметься при наступних викликах методів класу Number:
use Illuminate\Support\Number; /** * Ініціалізувати будь-які сервіси застосунку. */ public function boot(): void { Number::useCurrency('GBP'); }
Number::withCurrency()
Метод Number::withCurrency виконує надане замикання, використовуючи вказану валюту, а потім відновлює початкову валюту після виконання зворотного виклику:
use Illuminate\Support\Number;
$number = Number::withCurrency('GBP', function () {
// ...
});
Шляхи
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 для генерації повного шляху до вказаного файлу в межах директорії database:
$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.
public_path()
Функція public_path повертає повний шлях до вашого public каталогу застосунку. Ви також можете використовувати функцію public_path для створення повного шляху до вказаного файлу в межах public каталогу:
$path = public_path();
$path = public_path('css/app.css');
resource_path()
Функція resource_path повертає повний шлях до каталогу resources вашого застосунку. Ви також можете використовувати функцію resource_path для генерації повного шляху до вказаного файлу в каталозі resources:
$path = resource_path();
$path = resource_path('sass/app.scss');
storage_path()
Функція storage_path повертає повний шлях до директорії storage вашого застосунку. Ви також можете використовувати функцію storage_path для генерації повного шляху до вказаного файлу в межах директорії storage:
$path = storage_path();
$path = storage_path('app/file.txt');
URL-адреси
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 генерує повністю кваліфіковану HTTPS URL-адресу до вказаного шляху. Додаткові сегменти 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']);
uri()
Функція uri генерує екземпляр URI для заданого URI:
$uri = uri('https://example.com')
->withPath('/users')
->withQuery(['page' => 1]);
Якщо функції uri передано масив, що містить пару викликуваного контролера та методу, функція створить екземпляр Uri для шляху маршруту методу контролера:
use App\Http\Controllers\UserController;
$uri = uri([UserController::class, 'show'], ['user' => $user]);
Якщо контролер викликається, ви можете просто вказати ім'я класу контролера:
use App\Http\Controllers\UserIndexController;
$uri = uri(UserIndexController::class);
Якщо значення, надане функції uri, відповідає імені іменованого маршруту, буде згенеровано екземпляр Uri для шляху цього маршруту:
$uri = uri('users.show', ['user' => $user]);
url()
Функція url генерує повністю кваліфіковану URL-адресу до вказаного шляху:
$url = url('user/profile');
$url = url('user/profile', [1]);
Якщо шлях не вказано, буде повернено екземпляр Illuminate\Routing\UrlGenerator:
$current = url()->current();
$full = url()->full();
$previous = url()->previous();
Для отримання додаткової інформації про роботу з функцією url, зверніться до документації з генерації URL.
Різне
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();
Якщо потрібно, ви можете вказати, до якого екземпляра guard ви хочете отримати доступ:
$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();
broadcast_if()
Функція broadcast_if транслює дану подію її слухачам, якщо заданий булевий вираз оцінюється як true:
broadcast_if($user->isActive(), new UserRegistered($user));
broadcast_if($user->isActive(), new UserRegistered($user))->toOthers();
broadcast_unless()
Функція broadcast_unless транслює дану подію її слухачам, якщо заданий булевий вираз оцінюється як false:
broadcast_unless($user->isBanned(), new UserRegistered($user));
broadcast_unless($user->isBanned(), 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]);
context()
Функція context отримує значення з поточного контексту. Ви також можете надати значення за замовчуванням, яке буде повернено, якщо ключ контексту не існує:
$value = context('trace_id');
$value = context('trace_id', $default);
Ви можете встановити значення контексту, передаючи масив пар ключ/значення:
use Illuminate\Support\Str;
context(['trace_id' => Str::uuid()->toString()]);
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);
Для зворотної дії decrypt дивіться функцію encrypt.
dd()
Функція dd виводить значення заданих змінних і завершує виконання скрипту:
dd($value);
dd($value1, $value2, $value3, ...);
Якщо ви не хочете зупиняти виконання вашого скрипту, використовуйте функцію dump замість цього.
dispatch()
Функція dispatch додає вказану задачу до черги задач Laravel:
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');
Для зворотної дії до encrypt, дивіться функцію decrypt.
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. Зазвичай цей параметр конфігурації встановлюється через змінну середовища APP_FAKER_LOCALE. Ви також можете вказати локаль, передавши її у функцію 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('Корисна інформація!');
Масив контекстних даних також може бути переданий до функції:
info('Спроба входу користувача не вдалася.', ['id' => $user->id]);
literal()
Функція literal створює новий екземпляр stdClass з вказаними іменованими аргументами як властивостями:
$obj = literal(
name: 'Joe',
languages: ['PHP', 'Ruby'],
);
$obj->name; // 'Joe'
$obj->languages; // ['PHP', 'Ruby']
logger()
Функція logger може бути використана для запису повідомлення рівня debug до журналу:
logger('Налагоджувальне повідомлення');
Масив контекстних даних також може бути переданий у функцію:
logger('Користувач увійшов у систему.', ['id' => $user->id]);
Екземпляр логера буде повернуто, якщо значення не передано у функцію:
logger()->error('Вам заборонено тут перебувати.');
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) }}
once()
Функція once виконує наданий зворотний виклик і кешує результат у пам'яті на тривалість запиту. Будь-які наступні виклики функції once з тим самим зворотним викликом повернуть раніше кешований результат:
function random(): int
{
return once(function () {
return random_int(1, 1000);
});
}
random(); // 123
random(); // 123 (cached result)
random(); // 123 (cached result)
Коли функція once виконується зсередини екземпляра об'єкта, кешований результат буде унікальним для цього екземпляра об'єкта:
<?php
class NumberService
{
public function all(): array
{
return once(fn () => [1, 2, 3]);
}
}
$service = new NumberService;
$service->all();
$service->all(); // (cached result)
$secondService = new NumberService;
$secondService->all();
$secondService->all(); // (cached result)
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 = [], $secure = null);
return redirect('/home');
return redirect()->route('route.name');
report()
Функція report повідомить про виняток, використовуючи ваш обробник винятків:
report($e);
Функція report також приймає рядок як аргумент. Коли рядок передається у функцію, функція створить виняток з цим рядком як його повідомлення:
report('Щось пішло не так.');
report_if()
Функція report_if повідомить про виняток, використовуючи ваш обробник винятків, якщо заданий булевий вираз оцінюється як true:
report_if($shouldReport, $e); report_if($shouldReport, 'Щось пішло не так.');
report_unless()
Функція report_unless повідомить про виняток, використовуючи ваш обробник винятків, якщо заданий булевий вираз оцінюється як false:
report_unless($reportingDisabled, $e); report_unless($reportingDisabled, 'Щось пішло не так.');
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 App\Exceptions\TemporaryException;
use Exception;
return retry(5, function () {
// ...
}, 100, function (Exception $exception) {
return $exception instanceof TemporaryException;
});
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, 'Вам заборонено доступ до цієї сторінки.' );
throw_unless()
Функція throw_unless викидає задане виключення, якщо заданий булевий вираз оцінюється як false:
throw_unless(Auth::user()->isAdmin(), AuthorizationException::class); throw_unless( Auth::user()->isAdmin(), AuthorizationException::class, 'Вам заборонено доступ до цієї сторінки.' );
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, 'Значення порожнє'); // Значення порожнє
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
when()
Функція when повертає значення, яке їй передано, якщо задана умова оцінюється як true. В іншому випадку повертається null. Якщо замикання передано як другий аргумент функції, замикання буде виконано, і його повернене значення буде повернено:
$value = when(true, 'Hello World');
$value = when(true, fn () => 'Hello World');
Функція when в основному корисна для умовного рендерингу HTML-атрибутів:
<div {!! when($condition, 'wire:poll="calculate"') !!}>
...
</div>
Інші утиліти
Тестування продуктивності
Іноді ви можете захотіти швидко протестувати продуктивність певних частин вашого застосунку. У таких випадках ви можете скористатися класом підтримки 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 дозволяють ставити завдання в чергу для обробки у фоновому режимі, іноді у вас можуть бути прості завдання, які ви хотіли б відкласти без налаштування або підтримки довготривалого працівника черги.
Відкладені функції дозволяють відкласти виконання замикання до моменту, коли HTTP-відповідь буде надіслана користувачу, зберігаючи ваш застосунок швидким та чуйним. Щоб відкласти виконання замикання, просто передайте замикання у функцію Illuminate\Support\defer:
use App\Services\Metrics; use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use function Illuminate\Support\defer; Route::post('/orders', function (Request $request) { // Створити замовлення... defer(fn () => Metrics::reportOrder($order)); return $order; });
За замовчуванням відкладені функції будуть виконані лише в тому випадку, якщо HTTP-відповідь, команда Artisan або поставлена в чергу задача, з якої викликається Illuminate\Support\defer, успішно завершуються. Це означає, що відкладені функції не будуть виконані, якщо запит призводить до HTTP-відповіді 4xx або 5xx. Якщо ви хочете, щоб відкладена функція завжди виконувалася, ви можете приєднати метод always до вашої відкладеної функції:
defer(fn () => Metrics::reportOrder($order))->always();
Скасування Відкладених Функцій
Якщо вам потрібно скасувати відкладену функцію до її виконання, ви можете використати метод forget, щоб скасувати функцію за її ім'ям. Щоб назвати відкладену функцію, надайте другий аргумент функції Illuminate\Support\defer:
defer(fn () => Metrics::report(), 'reportMetrics');
defer()->forget('reportMetrics');
Вимкнення Відкладених Функцій у Тестах
Коли пишете тести, може бути корисно вимкнути відкладені функції. Ви можете викликати withoutDefer у вашому тесті, щоб вказати Laravel виконати всі відкладені функції негайно:
test('without defer', function () {
$this->withoutDefer();
// ...
});
use Tests\TestCase;
class ExampleTest extends TestCase
{
public function test_without_defer(): void
{
$this->withoutDefer();
// ...
}
}
Якщо ви хочете вимкнути відкладені функції для всіх тестів у межах тестового випадку, ви можете викликати метод withoutDefer з методу setUp у вашому базовому класі TestCase:
<?php
namespace Tests;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
abstract class TestCase extends BaseTestCase
{
protected function setUp(): void
{
parent::setUp();
$this->withoutDefer();
}
}
Лотерея
Клас lottery у Laravel може бути використаний для виконання зворотних викликів на основі заданих шансів. Це може бути особливо корисним, коли ви хочете виконувати код лише для певного відсотка ваших вхідних запитів:
use Illuminate\Support\Lottery;
Lottery::odds(1, 20)
->winner(fn () => $user->won())
->loser(fn () => $user->lost())
->choose();
Ви можете поєднувати клас lottery Laravel з іншими функціями Laravel. Наприклад, ви можете бажати повідомляти лише невеликий відсоток повільних запитів до вашого обробника винятків. І, оскільки клас lottery є callable, ми можемо передати екземпляр класу в будь-який метод, який приймає callable:
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
Фасад 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 викличе наступний викликаємий елемент у конвеєрі. Як ви могли помітити, це дуже схоже на middleware.
Коли останній викликаємий елемент у конвеєрі викликає замикання $next, буде викликано викликаємий елемент, наданий методу then. Зазвичай цей викликаємий елемент просто поверне наданий вхід. Для зручності, якщо ви просто хочете повернути вхід після його обробки, ви можете використовувати метод thenReturn.
Звичайно, як обговорювалося раніше, ви не обмежені наданням замикань для вашого конвеєра. Ви також можете надати викликані класи. Якщо надано ім'я класу, клас буде створено за допомогою Сервіс-контейнера Laravel, що дозволяє впроваджувати залежності у викликаний клас:
$user = Pipeline::send($user)
->through([
GenerateProfilePhoto::class,
ActivateSubscription::class,
SendWelcomeEmail::class,
])
->thenReturn();
Sleep
Клас Sleep у Laravel є легковаговою обгорткою навколо нативних функцій PHP sleep та usleep, що забезпечує кращу тестованість, а також надає зручний для розробників API для роботи з часом:
use Illuminate\Support\Sleep;
$waiting = true;
while ($waiting) {
Sleep::for(1)->second();
$waiting = /* ... */;
}
Клас Sleep пропонує різноманітні методи, які дозволяють працювати з різними одиницями часу:
// Повернути значення після затримки...
$result = Sleep::for(1)->second()->then(fn () => 1 + 1);
// Спати, поки задане значення є істинним...
Sleep::for(1)->second()->while(fn () => shouldKeepSleeping());
// Призупинити виконання на 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());
// Аліас нативної PHP-функції "sleep"...
Sleep::sleep(2);
// Аліас нативної PHP функції "usleep"...
Sleep::usleep(5000);
Щоб легко поєднувати одиниці часу, ви можете використовувати метод and:
Sleep::for(1)->second()->and(10)->milliseconds();
Тестування Sleep
Коли ви тестуєте код, що використовує клас Sleep або нативні функції sleep в PHP, ваш тест призупинить виконання. Як ви можете очікувати, це значно уповільнює ваш набір тестів. Наприклад, уявіть, що ви тестуєте наступний код:
$waiting = /* ... */;
$seconds = 1;
while ($waiting) {
Sleep::for($seconds++)->seconds();
$waiting = /* ... */;
}
Зазвичай тестування цього коду займе принаймні одну секунду. На щастя, клас Sleep дозволяє нам "імітувати" затримку, щоб наш набір тестів залишався швидким:
it('waits until ready', function () {
Sleep::fake();
// ...
});
public function test_it_waits_until_ready()
{
Sleep::fake();
// ...
}
Коли підробляється клас Sleep, фактична пауза виконання обходиться, що призводить до значно швидшого тесту.
Після того як клас Sleep було підроблено, можна робити перевірки на очікувані "паузи", які мали б відбутися. Щоб проілюструвати це, уявімо, що ми тестуємо код, який зупиняє виконання тричі, при цьому кожна пауза збільшується на одну секунду. Використовуючи метод assertSequence, ми можемо перевірити, що наш код "зупинявся" на потрібний час, зберігаючи швидкість тесту:
it('checks if ready three times', function () {
Sleep::fake();
// ...
Sleep::assertSequence([
Sleep::for(1)->second(),
Sleep::for(2)->seconds(),
Sleep::for(3)->seconds(),
]);
}
public function test_it_checks_if_ready_three_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(); });
Оскільки прогресування часу є загальною вимогою, метод fake приймає аргумент syncWithCarbon, щоб підтримувати синхронізацію з Carbon під час очікування в тесті:
Sleep::fake(syncWithCarbon: true); $start = now(); Sleep::for(1)->second(); $start->diffForHumans(); // 1 секунду тому
Laravel використовує клас Sleep внутрішньо, коли призупиняє виконання. Наприклад, хелпер retry використовує клас Sleep під час паузи, що дозволяє покращити тестування при використанні цього хелпера.
Timebox
Laravel'ів клас Timebox гарантує, що наданий зворотний виклик завжди займає фіксовану кількість часу для виконання, навіть якщо його фактичне виконання завершується швидше. Це особливо корисно для криптографічних операцій та перевірок автентифікації користувачів, де зловмисники можуть використовувати варіації у часі виконання, щоб виявити конфіденційну інформацію.
Якщо виконання перевищує фіксовану тривалість, Timebox не має ефекту. Вибір достатньо довгої тривалості як фіксованої для врахування найгірших сценаріїв залишається на розсуд розробника.
Метод call приймає замикання та обмеження часу в мікросекундах, а потім виконує замикання і чекає, поки не буде досягнуто обмеження часу:
use Illuminate\Support\Timebox;
(new Timebox)->call(function ($timebox) {
// ...
}, microseconds: 10000);
Якщо виняток буде викликано всередині замикання, цей клас врахує визначену затримку і повторно викличе виняток після затримки.
URI
Клас Uri у Laravel надає зручний і плавний інтерфейс для створення та маніпулювання URI. Цей клас обгортає функціональність, надану базовим пакетом League URI, і безперешкодно інтегрується з системою маршрутизації Laravel.
Ви можете легко створити екземпляр Uri, використовуючи статичні методи:
use App\Http\Controllers\UserController;
use App\Http\Controllers\InvokableController;
use Illuminate\Support\Uri;
// Створити екземпляр URI з наданого рядка...
$uri = Uri::of('https://example.com/path');
// Генеруйте URI-екземпляри до шляхів, іменованих маршрутів або дій контролера...
$uri = Uri::to('/dashboard');
$uri = Uri::route('users.show', ['user' => 1]);
$uri = Uri::signedRoute('users.show', ['user' => 1]);
$uri = Uri::temporarySignedRoute('user.index', now()->addMinutes(5));
$uri = Uri::action([UserController::class, 'index']);
$uri = Uri::action(InvokableController::class);
// Створити екземпляр URI з поточного URL запиту...
$uri = $request->uri();
Якщо у вас є екземпляр URI, ви можете легко його змінити:
$uri = Uri::of('https://example.com')
->withScheme('http')
->withHost('test.com')
->withPort(8000)
->withPath('/users')
->withQuery(['page' => 2])
->withFragment('section-1');
Інспектування URI
Клас Uri також дозволяє легко перевіряти різні компоненти базового URI:
$scheme = $uri->scheme();
$host = $uri->host();
$port = $uri->port();
$path = $uri->path();
$segments = $uri->pathSegments();
$query = $uri->query();
$fragment = $uri->fragment();
Маніпулювання рядками запиту
Клас Uri пропонує декілька методів, які можуть бути використані для маніпуляції рядком запиту URI. Метод withQuery може бути використаний для об'єднання додаткових параметрів рядка запиту з існуючим рядком запиту:
$uri = $uri->withQuery(['sort' => 'name']);
Метод withQueryIfMissing може бути використаний для об'єднання додаткових параметрів рядка запиту з існуючим рядком запиту, якщо задані ключі ще не існують у рядку запиту:
$uri = $uri->withQueryIfMissing(['page' => 1]);
Метод replaceQuery може бути використаний для повної заміни існуючого рядка запиту новим:
$uri = $uri->replaceQuery(['page' => 1]);
Метод pushOntoQuery може бути використаний для додавання додаткових параметрів до параметра рядка запиту, який має значення масиву:
$uri = $uri->pushOntoQuery('filter', ['active', 'pending']);
Метод withoutQuery може бути використаний для видалення параметрів з рядка запиту:
$uri = $uri->withoutQuery(['page']);
Генерація відповідей з URI
Метод redirect може бути використаний для генерації екземпляра RedirectResponse до вказаного URI:
$uri = Uri::of('https://example.com');
return $uri->redirect();
Або ви можете просто повернути екземпляр Uri з маршруту або дії контролера, що автоматично згенерує відповідь перенаправлення на повернутий URI:
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Uri;
Route::get('/redirect', function () {
return Uri::to('/index')
->withQuery(['sort' => 'name']);
});
