헬퍼
소개
라라벨은 다양한 글로벌 "헬퍼" PHP 함수를 포함하고 있습니다. 이러한 함수 중 다수는 프레임워크 자체에서 사용되지만, 편리하다고 생각되면 애플리케이션에서 자유롭게 사용할 수 있습니다.
사용 가능한 메서드
배열 및 객체
Arr::accessible Arr::add Arr::collapse Arr::crossJoin Arr::divide Arr::dot Arr::except Arr::exists Arr::first Arr::flatten Arr::forget Arr::get Arr::has Arr::hasAny Arr::isAssoc Arr::isList Arr::join Arr::keyBy Arr::last Arr::map Arr::mapSpread Arr::mapWithKeys Arr::only Arr::pluck Arr::prepend Arr::prependKeysWith Arr::pull Arr::query Arr::random Arr::set Arr::shuffle Arr::sort Arr::sortDesc Arr::sortRecursive Arr::take Arr::toCssClasses Arr::toCssStyles Arr::undot Arr::where Arr::whereNotNull Arr::wrap data_fill data_get data_set data_forget head last
숫자
Number::abbreviate Number::clamp Number::currency Number::defaultCurrency Number::defaultLocale Number::fileSize Number::forHumans Number::format Number::ordinal Number::pairs Number::percentage Number::spell Number::trim Number::useLocale Number::withLocale Number::useCurrency Number::withCurrency
경로
URL
기타
abort abort_if abort_unless app auth back bcrypt blank broadcast cache class_uses_recursive collect config context cookie csrf_field csrf_token decrypt dd dispatch dispatch_sync dump encrypt env event fake filled info literal logger method_field now old once optional policy redirect report report_if report_unless request rescue resolve response retry session tap throw_if throw_unless today trait_uses_recursive transform validator value view with when
배열 및 객체
Arr::accessible()
Arr::accessible 메서드는 주어진 값이 배열에 접근 가능한지 여부를 확인합니다.
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를 반환합니다. 배열은 0부터 시작하는 순차적인 숫자 키가 없는 경우 "연관" 배열로 간주됩니다.
use Illuminate\Support\Arr; $isAssoc = Arr::isAssoc(['product' => ['name' => 'Desk', 'price' => 100]]); // true $isAssoc = Arr::isAssoc([1, 2, 3]); // false
Arr::isList()
Arr::isList 메서드는 주어진 배열의 키가 0부터 시작하는 순차적인 정수인 경우 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', ], [ '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 - (임의로 검색됨)
선택적 두 번째 인수로 반환할 항목의 수를 지정할 수도 있습니다. 이 인수를 제공하면 항목이 하나만 필요하더라도 배열이 반환됩니다.
use Illuminate\Support\Arr; $items = Arr::random($array, 2); // [2, 5] - (임의로 검색됨)
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::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::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;'*/
use Illuminate\Support\Arr; $hasColor = true; $array = ['background-color: blue', 'color: blue' => $hasColor]; $classes = Arr::toCssStyles($array); /* 'background-color: blue; color: blue;'*/
이 메서드는 Blade 컴포넌트의 속성 가방과 클래스를 병합하는 기능과 @class Blade 지시어를 지원하는 라라벨의 기능을 강화합니다.
Arr::undot()
Arr::undot 메서드는 "점" 표기법을 사용하는 1차원 배열을 다차원 배열로 확장합니다:
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 €
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 thousand $number = Number::forHumans(489939); // 490 thousand $number = Number::forHumans(1230000, precision: 2); // 1.23 million
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); // [[1, 10], [11, 20], [21, 25]] $result = Number::pairs(25, 10, offset: 0); // [[0, 10], [10, 20], [20, 25]]
Number::pairs 메서드는 숫자를 쌍으로 묶어 배열로 반환합니다.
첫 번째 예제에서는 25를 10씩 묶어서 쌍을 만들고 있습니다. 결과는 [[1, 10], [11, 20], [21, 25]] 입니다.
두 번째 예제에서는 offset 매개변수를 사용하여 묶는 시작점을 0으로 설정했습니다. 결과는 [[0, 10], [10, 20], [20, 25]] 입니다.
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); // one hundred and two $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::trim()
Number::trim 메서드는 주어진 숫자의 소수점 뒤에 오는 모든 후행 0을 제거합니다.
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 () { // ...});
Paths
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 언어 파일을 사용자 지정하려면 lang:publish Artisan 명령을 통해 게시할 수 있습니다.
mix()
mix 함수는 버전이 지정된 Mix 파일의 경로를 반환합니다.
$path = mix('css/app.css');
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');
URLs
action()
action 함수는 주어진 컨트롤러 액션에 대한 URL을 생성합니다.
use App\Http\Controllers\HomeController; $url = action([HomeController::class, 'index']);
메서드가 경로 매개변수를 허용하는 경우 메서드에 대한 두 번째 인수로 전달할 수 있습니다.
$url = action([UserController::class, 'profile'], ['id' => 1]);
asset()
asset 함수는 요청의 현재 체계 (HTTP 또는 HTTPS)를 사용하여 자산에 대한 URL을 생성합니다.
$url = asset('img/photo.jpg');
.env 파일에서 ASSET_URL 변수를 설정하여 자산 URL 호스트를 구성할 수 있습니다. 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 함수는 HTTPS를 사용하여 자산에 대한 URL을 생성합니다.
$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]);
필요한 경우, to_route 메서드에 세 번째 및 네 번째 인수로 리디렉션에 할당해야 하는 HTTP 상태 코드 및 추가 응답 헤더를 전달할 수 있습니다.
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();
Miscellaneous
abort()
abort 함수는 예외 처리기에 의해 렌더링되는 HTTP 예외를 발생시킵니다.
abort(403);
브라우저로 보내야 하는 예외의 메시지 및 사용자 정의 HTTP 응답 헤더를 제공할 수도 있습니다.
abort(403, 'Unauthorized.', $headers);
abort_if()
abort_if 함수는 주어진 부울 표현식이 true로 평가되는 경우 HTTP 예외를 발생시킵니다.
abort_if(! Auth::user()->isAdmin(), 403);
abort 메서드와 마찬가지로, 예외의 응답 텍스트를 세 번째 인수로, 사용자 지정 응답 헤더 배열을 함수의 네 번째 인수로 제공할 수도 있습니다.
abort_unless()
abort_unless 함수는 주어진 부울 표현식이 false로 평가되는 경우 HTTP 예외를 발생시킵니다.
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]);
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('name', 'value', $minutes);
csrf_field()
csrf_field 함수는 CSRF 토큰 값을 포함하는 HTML hidden 입력 필드를 생성합니다. 예를 들어, 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 작업 대기열로 푸시합니다.
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>이름</dt> <dd>{{ fake()->name() }}</dd> <dt>이메일</dt> <dd>{{ fake()->unique()->safeEmail() }}</dd> </dl>@endfor
기본적으로 fake 함수는 config/app.php 설정 파일의 app.faker_locale 설정 옵션을 사용합니다. 일반적으로 이 설정 옵션은 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 함수는 폼의 HTTP 동사의 스푸핑된 값을 포함하는 HTML hidden 입력 필드를 생성합니다. 예를 들어 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(); // 123random(); // 123 (캐시된 결과)random(); // 123 (캐시된 결과)
객체 인스턴스 내에서 once 함수가 실행되면 캐시된 결과는 해당 객체 인스턴스에 고유합니다.
<?php class NumberService{ public function all(): array { return once(fn () => [1, 2, 3]); }} $service = new NumberService; $service->all();$service->all(); // (캐시된 결과) $secondService = new NumberService; $secondService->all();$secondService->all(); // (캐시된 결과)
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 함수는 주어진 조건이 true이면 예외 처리기를 사용하여 예외를 보고합니다:
report_if($shouldReport, $e); report_if($shouldReport, 'Something went wrong.');
report_unless()
report_unless 함수는 주어진 조건이 false이면 예외 처리기를 사용하여 예외를 보고합니다:
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();});
rescue 함수에 report 인자를 제공하여 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 () { // 시도 사이에 100ms를 쉬면서 5번 시도...}, 100);
시도 사이에 휴식할 밀리초 수를 수동으로 계산하려면 retry 함수의 세 번째 인자로 클로저를 전달할 수 있습니다:
use Exception; return retry(5, function () { // ...}, function (int $attempt, Exception $exception) { return $attempt * 100;});
편의를 위해 retry 함수의 첫 번째 인자로 배열을 제공할 수 있습니다. 이 배열은 후속 시도 사이에 휴식할 밀리초 수를 결정하는 데 사용됩니다:
return retry([100, 200], function () { // 첫 번째 재시도에서 100ms 동안 휴식하고, 두 번째 재시도에서 200ms 동안 휴식...});
특정 조건에서만 재시도하려면 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 메서드는 일반적으로 정수를 반환합니다. 그러나 tap 함수를 통해 update 메서드 호출을 체인하여 메서드가 모델 자체를 반환하도록 강제할 수 있습니다:
$user = tap($user)->update([ 'name' => $name, 'email' => $email,]);
클래스에 tap 메서드를 추가하려면 클래스에 Illuminate\Support\Traits\Tappable 트레이트를 추가하면 됩니다. 이 트레이트의 tap 메서드는 유일한 인수로 Closure를 받습니다. 객체 인스턴스 자체가 Closure에 전달된 다음 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 함수는 값이 blank가 아니면 주어진 값에 대해 클로저를 실행한 다음 클로저의 반환 값을 반환합니다:
$callback = function (int $value) { return $value * 2;}; $result = transform(5, $callback); // 10
기본값 또는 클로저를 함수의 세 번째 인자로 전달할 수 있습니다. 주어진 값이 blank이면 이 값이 반환됩니다:
$result = transform(null, $callback, 'The value is blank'); // 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
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([ '시나리오 1' => fn () => User::count(), // 0.5 ms '시나리오 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());
날짜
라라벨에는 강력한 날짜 및 시간 조작 라이브러리인 Carbon이 포함되어 있습니다. 새 Carbon 인스턴스를 만들려면 now 함수를 호출하면 됩니다. 이 함수는 라라벨 애플리케이션 내에서 전역적으로 사용할 수 있습니다.
$now = now();
또는 Illuminate\Support\Carbon 클래스를 사용하여 새 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;});
기본적으로 지연된 함수는 Illuminate\Support\defer가 호출된 HTTP 응답, Artisan 명령어 또는 큐에 넣은 작업이 성공적으로 완료된 경우에만 실행됩니다. 이는 요청으로 인해 4xx 또는 5xx HTTP 응답이 발생하는 경우 지연된 함수가 실행되지 않음을 의미합니다. 지연된 함수가 항상 실행되도록 하려면 always 메서드를 지연된 함수에 연결하면 됩니다.
defer(fn () => Metrics::reportOrder($order))->always();
지연된 함수 취소
실행되기 전에 지연된 함수를 취소해야 하는 경우 forget 메서드를 사용하여 이름으로 함수를 취소할 수 있습니다. 지연된 함수에 이름을 지정하려면 Illuminate\Support\defer 함수에 두 번째 인수를 제공하십시오.
defer(fn () => Metrics::report(), 'reportMetrics'); defer()->forget('reportMetrics');
지연된 함수 호환성
Laravel 10.x 애플리케이션에서 Laravel 11.x로 업그레이드했으며 애플리케이션 스켈레톤에 여전히 app/Http/Kernel.php 파일이 있는 경우, 커널의 $middleware 속성 맨 앞에 InvokeDeferredCallbacks 미들웨어를 추가해야 합니다:
protected $middleware = [ \Illuminate\Foundation\Http\Middleware\InvokeDeferredCallbacks::class, \App\Http\Middleware\TrustProxies::class, // ...];
테스트에서 지연된 함수 비활성화
테스트를 작성할 때 지연된 함수를 비활성화하는 것이 유용할 수 있습니다. 테스트에서 withoutDefer를 호출하여 Laravel에 모든 지연된 함수를 즉시 호출하도록 지시할 수 있습니다:
test('without defer', function () { $this->withoutDefer(); // ...});
use Tests\TestCase; class ExampleTest extends TestCase{ public function test_without_defer(): void { $this->withoutDefer(); // ... }}
테스트 케이스 내의 모든 테스트에 대해 지연된 함수를 비활성화하려면 기본 TestCase 클래스의 setUp 메서드에서 withoutDefer 메서드를 호출할 수 있습니다:
<?php namespace Tests; use Illuminate\Foundation\Testing\TestCase as BaseTestCase; abstract class TestCase extends BaseTestCase{ protected function setUp(): void { parent::setUp(); $this->withoutDefer(); }}
로터리
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();
파이프라인
Laravel의 Pipeline 파사드는 주어진 입력을 일련의 호출 가능한 클래스, 클로저 또는 호출 가능 항목을 통해 "파이프"하는 편리한 방법을 제공하여 각 클래스에 입력을 검사하거나 수정하고 파이프라인에서 다음 호출 가능 항목을 호출할 기회를 제공합니다.
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 클래스는 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 클래스 또는 PHP 기본 sleep 함수를 사용하는 코드를 테스트할 때 테스트 실행이 일시 중지됩니다. 예상대로 이는 테스트 스위트를 상당히 느리게 만듭니다. 예를 들어 다음 코드를 테스트한다고 상상해 보세요.
$waiting = /* ... */; $seconds = 1; while ($waiting) { Sleep::for($seconds++)->seconds(); $waiting = /* ... */;}
일반적으로 이 코드를 테스트하는 데에는 최소한 1초가 걸립니다. 다행히 Sleep 클래스를 사용하면 "가짜" 슬립을 수행하여 테스트 스위트가 빠르게 유지되도록 할 수 있습니다.
it('준비될 때까지 기다립니다.', function () { Sleep::fake(); // ...});
public function test_it_waits_until_ready(){ Sleep::fake(); // ...}
Sleep 클래스를 페이크 처리하면 실제 실행 일시 중지가 우회되어 테스트 속도가 크게 향상됩니다.
Sleep 클래스가 페이크 처리되면 발생했어야 하는 예상 "sleep"에 대해 어설션을 수행할 수 있습니다. 이를 설명하기 위해 각 일시 중지가 1초씩 증가하면서 세 번 실행을 일시 중지하는 코드를 테스트한다고 가정해 보겠습니다. assertSequence 메서드를 사용하면 테스트 속도를 유지하면서 코드가 적절한 시간 동안 "sleep"했는지 어설션할 수 있습니다.
it('세 번 준비되었는지 확인합니다.', 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 지속 시간에 대한 어설션...Sleep::assertSlept(function (Duration $duration): bool { return /* ... */;}, times: 1); // Sleep 클래스가 전혀 호출되지 않았는지 어설션...Sleep::assertNeverSlept(); // Sleep이 호출되었더라도, 실행이 일시 중지되지 않았는지 어설션...Sleep::assertInsomniac();
애플리케이션 코드에서 가짜 sleep이 발생할 때마다 작업을 수행하는 것이 유용할 수 있습니다. 이를 위해 whenFakingSleep 메서드에 콜백을 제공할 수 있습니다. 다음 예제에서는 Laravel의 시간 조작 도우미를 사용하여 각 sleep의 지속 시간만큼 즉시 시간을 진행합니다.
use Carbon\CarbonInterval as Duration; $this->freezeTime(); Sleep::fake(); Sleep::whenFakingSleep(function (Duration $duration) { // 가짜 sleep 시 시간 진행... $this->travel($duration->totalMilliseconds)->milliseconds();});
시간 진행이 일반적인 요구 사항이므로, fake 메서드는 테스트 내에서 sleep 시 Carbon을 동기화 상태로 유지하기 위한 syncWithCarbon 인수를 허용합니다.
Sleep::fake(syncWithCarbon: true); $start = now(); Sleep::for(1)->second(); $start->diffForHumans(); // 1초 전
Laravel은 실행을 일시 중지할 때마다 내부적으로 Sleep 클래스를 사용합니다. 예를 들어, retry 도우미는 sleep 시 Sleep 클래스를 사용하여 해당 도우미를 사용할 때 향상된 테스트 가능성을 제공합니다.