نسخه:

یاوران

معرفی

لاراول شامل انواع مختلفی از توابع جهانی "کمک کننده" PHP است. بسیاری از این توابع توسط خود چارچوب استفاده می شود. با این حال، شما آزاد هستید که از آنها در برنامه های کاربردی خود استفاده کنید اگر آنها را راحت می دانید.

روش های موجود

آرایه ها و اشیاء

شماره

راه ها

URL ها

متفرقه

آرایه ها و اشیاء

Arr::accessible()

این Arr::accessible روش تعیین می کند که آیا مقدار داده شده در دسترس آرایه است یا خیر:

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

Arr::add()

این Arr::add متد یک جفت کلید/مقدار معین را به یک آرایه اضافه می کند اگر کلید داده شده از قبل در آرایه وجود نداشته باشد یا روی null :

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

Arr::collapse()

این Arr::collapse روش یک آرایه از آرایه ها را در یک آرایه منفرد جمع می کند:

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

Arr::crossJoin()

متد Arr::crossJoin متقاطع به آرایه های داده شده می پیوندد و یک محصول دکارتی را با همه جایگشت های ممکن برمی گرداند:

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

Arr::divide()

متد Arr::divide دو آرایه را برمی گرداند: یکی حاوی کلیدها و دیگری حاوی مقادیر آرایه داده شده:

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

Arr::dot()

این Arr::dot روش یک آرایه چند بعدی را به یک آرایه سطح تکی مسطح می کند که از نماد "نقطه" برای نشان دادن عمق استفاده می کند:

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

Arr::except()

این Arr::except روش جفت های کلید / مقدار داده شده را از یک آرایه حذف می کند:

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

Arr::exists()

متد Arr::exists بررسی می کند که کلید داده شده در آرایه ارائه شده وجود داشته باشد:

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

Arr::first()

این Arr::first متد اولین عنصر آرایه ای را که آزمون صدق داده شده را رد می کند، برمی گرداند:

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

یک مقدار پیش فرض نیز ممکن است به عنوان پارامتر سوم به متد ارسال شود. در صورتی که هیچ مقداری از آزمون حقیقت عبور نکند، این مقدار برگردانده خواهد شد:

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

Arr::flatten()

این Arr::flatten روش یک آرایه چند بعدی را به یک آرایه سطح واحد مسطح می کند:

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

Arr::forget()

این Arr::forget روش یک جفت کلید/مقدار داده شده را از یک آرایه عمیق تو در تو با استفاده از نماد "نقطه" حذف می کند:

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

Arr::get()

این Arr::get روش مقداری را از یک آرایه عمیق تو در تو با استفاده از نماد "نقطه" بازیابی می کند:

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

این Arr::get متد یک مقدار پیش‌فرض را نیز می‌پذیرد که اگر کلید مشخص شده در آرایه وجود نداشته باشد، برگردانده می‌شود:

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

Arr::has()

این Arr::has روش بررسی می کند که آیا یک مورد یا موارد داده شده در یک آرایه با استفاده از نماد "نقطه" وجود دارد یا خیر:

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

Arr::hasAny()

این Arr::hasAny روش بررسی می‌کند که آیا هر آیتمی در یک مجموعه داده شده در یک آرایه با استفاده از نماد "نقطه" وجود دارد یا خیر:

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

Arr::isAssoc()

اگر آرایه داده شده یک آرایه انجمنی باشد، روش Arr::isAssoc برمی گردد . true اگر یک آرایه دارای کلیدهای عددی متوالی نباشد که با صفر شروع می شوند، "تداعی" در نظر گرفته می شود:

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

Arr::isList()

اگر کلیدهای آرایه داده شده اعداد صحیح متوالی باشند که از صفر شروع می شوند، روش Arr::isList برمی گردد : true

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

Arr::join()

متد Arr::join عناصر آرایه را با یک رشته به هم می پیوندد. با استفاده از آرگومان دوم این روش، می‌توانید رشته اتصال را برای عنصر نهایی آرایه نیز مشخص کنید:

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

Arr::keyBy()

متد Arr::keyBy آرایه را با کلید داده شده کلید می زند. اگر چندین آیتم دارای یک کلید باشند، فقط آخرین مورد در آرایه جدید ظاهر می شود:

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

Arr::last()

متد Arr::last آخرین عنصر آرایه ای را که آزمون صدق داده شده را رد می کند، برمی گرداند:

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

یک مقدار پیش فرض ممکن است به عنوان آرگومان سوم به متد ارسال شود. در صورتی که هیچ مقداری از آزمون حقیقت عبور نکند، این مقدار برگردانده خواهد شد:

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

Arr::map()

متد Arr::map از طریق آرایه تکرار می شود و هر مقدار و کلید را به فراخوانی داده شده ارسال می کند. مقدار آرایه با مقدار بازگشتی با callback جایگزین می شود:

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 از طریق آرایه تکرار می شود و هر مقدار را به callback داده شده ارسال می کند. تماس برگشتی باید یک آرایه انجمنی حاوی یک جفت کلید / مقدار را برگرداند:

use Illuminate\Support\Arr;
 
$array = [
[
'name' => 'John',
'department' => 'Sales',
'email' => 'john@example.com',
],
[
'name' => 'Jane',
'department' => 'Marketing',
'email' => 'jane@example.com',
]
];
 
$mapped = Arr::mapWithKeys($array, function (array $item, int $key) {
return [$item['email'] => $item['name']];
});
 
/*
[
'john@example.com' => 'John',
'jane@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::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 آرایه را به یک query string تبدیل می کند:

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

Arr::random()

متد Arr::random یک مقدار تصادفی را از یک آرایه برمی گرداند:

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

همچنین می توانید تعداد آیتم هایی را که باید به عنوان آرگومان دوم اختیاری برگردانده شوند، مشخص کنید. توجه داشته باشید که ارائه این آرگومان یک آرایه را برمی گرداند حتی اگر فقط یک آیتم مورد نظر باشد:

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

Arr::set()

این Arr::set روش مقداری را در یک آرایه عمیق تو در تو با استفاده از نماد "نقطه" تنظیم می کند:

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

Arr::shuffle()

این Arr::shuffle روش به طور تصادفی موارد موجود در آرایه را با هم مخلوط می کند:

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

Arr::sort()

متد Arr::sort یک آرایه را بر اساس مقادیر آن مرتب می کند:

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

همچنین می توانید آرایه را بر اساس نتایج یک بسته شدن مشخص مرتب کنید:

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

Arr::sortDesc()

این Arr::sortDesc روش یک آرایه را به ترتیب نزولی بر اساس مقادیر آن مرتب می کند:

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

همچنین می توانید آرایه را بر اساس نتایج یک بسته شدن مشخص مرتب کنید:

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

Arr::sortRecursive()

این Arr::sortRecursive روش به صورت بازگشتی یک آرایه را با استفاده از sort تابع برای زیر آرایه های شاخص عددی و ksort تابع برای زیر آرایه های انجمنی مرتب می کند:

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

اگر می خواهید نتایج به ترتیب نزولی مرتب شوند، می توانید از Arr::sortRecursiveDesc روش استفاده کنید.

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

Arr::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;'
*/

این روش عملکرد لاراول را تقویت می کند و اجازه می دهد تا کلاس ها را با کیسه ویژگی 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
 
$currency = Number::currency(1000, in: 'EUR');
 
// €1,000
 
$currency = Number::currency(1000, in: 'EUR', locale: 'de');
 
// 1.000 €

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::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::useLocale()

این Number::useLocale روش، محلی شماره پیش‌فرض را در سطح جهانی تنظیم می‌کند، که بر نحوه قالب‌بندی اعداد و واحد پول با فراخوانی‌های بعدی متدهای Number کلاس تأثیر می‌گذارد:

use Illuminate\Support\Number;
 
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Number::useLocale('de');
}

Number::withLocale()

این Number::withLocale متد بسته شدن داده شده را با استفاده از محلی مشخص شده اجرا می کند و سپس پس از اجرای callback، محلی اصلی را بازیابی می کند:

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

راه ها

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');

به طور پیش فرض، اسکلت برنامه لاراول شامل lang دایرکتوری نمی شود. اگر می خواهید فایل های زبان لاراول را شخصی سازی کنید، می توانید آنها را از طریق lang:publish دستور Artisan منتشر کنید.

mix()

تابع mix مسیر را به فایل Mix نسخه شده برمی گرداند :

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

public_path()

این public_path تابع مسیر کاملا واجد شرایط را به public فهرست برنامه شما برمی گرداند. همچنین می‌توانید از public_path تابع برای ایجاد یک مسیر کاملاً واجد شرایط به یک فایل معین در فهرست عمومی استفاده کنید:

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

resource_path()

این resource_path تابع مسیر کاملا واجد شرایط را به resources فهرست برنامه شما برمی گرداند. همچنین می توانید از resource_path تابع برای ایجاد یک مسیر کاملا واجد شرایط به یک فایل معین در فهرست منابع استفاده کنید:

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

storage_path()

این storage_path تابع مسیر کاملا واجد شرایط را به storage فهرست برنامه شما برمی گرداند. همچنین می توانید از این storage_path تابع برای ایجاد یک مسیر کاملا واجد شرایط به یک فایل معین در فهرست ذخیره سازی استفاده کنید:

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

URL ها

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');

می‌توانید میزبان URL دارایی را با تنظیم ASSET_URL متغیر در .env فایل خود پیکربندی کنید. اگر دارایی های خود را روی یک سرویس خارجی مانند آمازون 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 یک URL HTTPS کاملا واجد شرایط به مسیر داده شده تولید می کند. بخش‌های URL اضافی ممکن است در آرگومان دوم تابع ارسال شوند:

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

to_route()

تابع to_route یک پاسخ HTTP تغییر مسیر را برای یک مسیر با نام مشخص تولید می کند :

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

در صورت لزوم، می توانید کد وضعیت HTTP را که باید به ریدایرکت اختصاص داده شود و هر سرصفحه پاسخ اضافی به عنوان آرگومان سوم و چهارم به متد ارسال کنید to_route :

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

url()

تابع url یک URL کاملا واجد شرایط برای مسیر داده شده ایجاد می کند:

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

اگر مسیری ارائه نشده باشد، یک Illuminate\Routing\UrlGenerator نمونه برگردانده می شود:

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

متفرقه

abort()

این abort تابع یک استثنای HTTP ایجاد می کند که توسط کنترل کننده استثنا ارائه می شود :

abort(403);

همچنین می‌توانید پیام استثنا و سرصفحه‌های پاسخ HTTP سفارشی را که باید به مرورگر ارسال شود ارائه دهید:

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

abort_if()

abort_if اگر یک عبارت بولی داده شده به صورت زیر ارزیابی شود، تابع یک استثنا HTTP ایجاد می کند true :

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

مانند abort روش، می‌توانید متن پاسخ استثنا را به عنوان آرگومان سوم و آرایه‌ای از سرصفحه‌های پاسخ سفارشی را به عنوان آرگومان چهارم برای تابع ارائه دهید.

abort_unless()

abort_unless اگر یک عبارت بولی داده شده به صورت زیر ارزیابی شود، تابع یک استثنا HTTP ایجاد می کند false :

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

مانند abort روش، می‌توانید متن پاسخ استثنا را به عنوان آرگومان سوم و آرایه‌ای از سرصفحه‌های پاسخ سفارشی را به عنوان آرگومان چهارم برای تابع ارائه دهید.

app()

تابع نمونه کانتینر سرویس app را برمی گرداند :

$container = app();

می توانید یک کلاس یا نام رابط را برای حل آن از کانتینر ارسال کنید:

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

auth()

تابع auth یک نمونه احراز هویت کننده را برمی گرداند . می توانید از آن به عنوان جایگزینی برای Auth نما استفاده کنید:

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

در صورت نیاز، می توانید مشخص کنید که به کدام نمونه نگهبان می خواهید دسترسی داشته باشید:

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

back()

این back تابع یک پاسخ HTTP تغییر مسیر به مکان قبلی کاربر ایجاد می کند:

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

bcrypt()

تابع با استفاده از Bcrypt مقدار داده شده را هش می کند bcrypt . می توانید از این عملکرد به عنوان جایگزینی برای نما استفاده کنید: Hash

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

blank()

تابع blank تعیین می کند که آیا مقدار داده شده "خالی" است:

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

برای معکوس blank ، filled روش را ببینید.

broadcast()

تابع رویداد داده شده را برای broadcast شنوندگان خود پخش می کند :

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

cache()

این cache تابع ممکن است برای دریافت مقادیر از حافظه پنهان استفاده شود . اگر کلید داده شده در حافظه پنهان وجود نداشته باشد، یک مقدار پیش فرض اختیاری برگردانده می شود:

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

می‌توانید با ارسال آرایه‌ای از جفت‌های کلید/مقدار به تابع، موارد را به حافظه پنهان اضافه کنید. همچنین باید تعداد ثانیه ها یا مدت زمانی را که مقدار کش شده باید معتبر در نظر گرفته شود، بگذرانید:

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

class_uses_recursive()

این class_uses_recursive تابع تمام صفات استفاده شده توسط یک کلاس، از جمله صفات استفاده شده توسط تمام کلاس های والد آن را برمی گرداند:

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

collect()

تابع collect یک نمونه مجموعه از مقدار داده شده ایجاد می کند:

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

config()

تابع config مقدار یک متغیر پیکربندی را دریافت می کند . مقادیر پیکربندی ممکن است با استفاده از نحو "نقطه"، که شامل نام فایل و گزینه ای است که می خواهید به آن دسترسی داشته باشید، قابل دسترسی است. یک مقدار پیش‌فرض ممکن است مشخص شود و اگر گزینه پیکربندی وجود نداشته باشد، برگردانده می‌شود:

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

می‌توانید با ارسال آرایه‌ای از جفت‌های کلید/مقدار، متغیرهای پیکربندی را در زمان اجرا تنظیم کنید. با این حال، توجه داشته باشید که این تابع فقط بر روی مقدار پیکربندی درخواست فعلی تأثیر می گذارد و مقادیر پیکربندی واقعی شما را به روز نمی کند:

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

تابع یک نمونه کوکی cookie جدید ایجاد می کند :

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

csrf_field()

تابع csrf_field یک فیلد ورودی HTML hidden حاوی مقدار توکن CSRF تولید می کند. به عنوان مثال، با استفاده از دستور Blade :

{{ csrf_field() }}

csrf_token()

تابع csrf_token مقدار توکن CSRF فعلی را بازیابی می کند:

$token = csrf_token();

decrypt()

تابع مقدار داده شده را رمزگشایی می کند decrypt . می توانید از این عملکرد به عنوان جایگزینی برای نما استفاده کنید: Crypt

$password = decrypt($value);

dd()

تابع dd متغیرهای داده شده را تخلیه می کند و اجرای اسکریپت را پایان می دهد:

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

اگر نمی خواهید اجرای اسکریپت خود را متوقف کنید، dump به جای آن از تابع استفاده کنید.

dispatch()

تابع کار dispatch داده شده را به صف کار لاراول فشار می دهد :

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 singleton را از ظرف جدا می‌کند، که می‌تواند هنگام ایجاد داده‌های جعلی در کارخانه‌های مدل، کاشت پایگاه داده، آزمایش‌ها و نماهای نمونه‌سازی مفید باشد:

@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('Some helpful information!');

آرایه ای از داده های متنی نیز ممکن است به تابع ارسال شود:

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

literal()

"این تابع یک نمونه stdClass literal جدید با آرگومان های نامگذاری شده به عنوان ویژگی ایجاد می کند:

$obj = literal(
name: 'Joe',
languages: ['PHP', 'Ruby'],
);
 
$obj->name; // 'Joe'
$obj->languages; // ['PHP', 'Ruby']

logger()

از این تابع می توان برای نوشتن یک پیام سطح به گزارش logger استفاده کرد : debug

logger('Debug message');

آرایه ای از داده های متنی نیز ممکن است به تابع ارسال شود:

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

اگر مقداری به تابع ارسال نشود، یک نمونه لاگر برگردانده می شود:

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

method_field()

این method_field تابع یک فیلد ورودی HTML hidden حاوی مقدار جعلی فعل HTTP فرم تولید می کند. به عنوان مثال، با استفاده از دستور Blade :

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

now()

تابع now یک نمونه جدید Illuminate\Support\Carbon برای زمان فعلی ایجاد می کند:

$now = now();

old()

تابع یک مقدار ورودی قدیمی فلش شده در جلسه old را بازیابی می کند :

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

از آنجایی که «مقدار پیش‌فرض» ارائه‌شده به‌عنوان آرگومان دوم برای تابع، old اغلب ویژگی یک مدل Eloquent است، لاراول به شما اجازه می‌دهد تا به سادگی کل مدل Eloquent را به‌عنوان آرگومان دوم به تابع منتقل کنید old . هنگام انجام این کار، لاراول فرض می کند اولین آرگومان ارائه شده به old تابع، نام ویژگی Eloquent است که باید به عنوان "مقدار پیش فرض" در نظر گرفته شود:

{{ old('name', $user->name) }}
 
// Is equivalent to...
 
{{ 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 همچنین بسته شدن را به عنوان آرگومان دوم خود می پذیرد. اگر مقدار ارائه شده به عنوان آرگومان اول تهی نباشد، بسته شدن فراخوانی می شود:

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

policy()

متد policy یک نمونه سیاست را برای یک کلاس مشخص بازیابی می کند:

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

redirect()

تابع یک پاسخ HTTP ریدایرکت را redirect برمی‌گرداند ، یا اگر بدون آرگومان فراخوانی شود، نمونه redirector را برمی‌گرداند:

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();
});

ممکن است یک 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 () {
// Attempt 5 times while resting 100ms between attempts...
}, 100);

اگر می‌خواهید تعداد میلی‌ثانیه‌های خواب بین تلاش‌ها را به صورت دستی محاسبه کنید، می‌توانید یک بسته را به عنوان آرگومان سوم به تابع ارسال کنید retry :

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

برای راحتی، ممکن است یک آرایه به عنوان اولین آرگومان برای retry تابع ارائه کنید. این آرایه برای تعیین چند میلی ثانیه خواب بین تلاش های بعدی استفاده می شود:

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

فقط برای تلاش مجدد در شرایط خاص، می توانید یک بسته را به عنوان آرگومان چهارم به 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]);

اگر مقداری به تابع ارسال نشود، Session Store برگردانده خواهد شد:

$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 این خصیصه یک Close را به عنوان تنها استدلال خود می پذیرد. خود نمونه شی به 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 اگر مقدار آن خالی نباشد، تابع یک بسته را روی یک مقدار مشخص اجرا می کند و سپس مقدار بازگشتی بسته شدن را برمی گرداند:

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

یک مقدار پیش فرض یا بسته شدن ممکن است به عنوان آرگومان سوم به تابع ارسال شود. اگر مقدار داده شده خالی باشد، این مقدار برگردانده می شود:

$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 یک نمونه view را بازیابی می کند :

return view('auth.login');

with()

تابع with مقدار داده شده را برمی گرداند. اگر یک بسته به عنوان آرگومان دوم به تابع ارسال شود، بسته شدن اجرا می شود و مقدار بازگشتی آن برگردانده می شود:

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

سایر ابزارهای کمکی

محک زدن

گاهی اوقات ممکن است بخواهید به سرعت عملکرد بخش های خاصی از برنامه خود را آزمایش کنید. در این مواقع، می‌توانید از Benchmark کلاس پشتیبانی برای اندازه‌گیری تعداد میلی‌ثانیه‌ای که برای تکمیل تماس‌های داده شده طول می‌کشد، استفاده کنید:

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

به طور پیش فرض، تماس های داده شده یک بار (یک بار تکرار) اجرا می شوند و مدت زمان آنها در مرورگر / کنسول نمایش داده می شود.

برای فراخوانی یک فراخوانی بیش از یک بار، می‌توانید تعداد تکرارهایی را که بازخوانی باید به عنوان آرگومان دوم متد فراخوانی شود، مشخص کنید. هنگامی که یک تماس برگشتی بیش از یک بار اجرا می شود، Benchmark کلاس میانگین میلی ثانیه ای را که برای اجرای پاسخ در تمام تکرارها صرف شده است، برمی گرداند:

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

گاهی اوقات، ممکن است بخواهید اجرای یک callback را محک بزنید در حالی که هنوز مقدار بازگشتی توسط callback را بدست می آورید. این value متد یک تاپل حاوی مقدار بازگشتی توسط callback و مقدار میلی‌ثانیه‌ای که برای اجرای callback طول کشیده است را برمی‌گرداند:

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

تاریخ

لاراول شامل Carbon ، یک کتابخانه قدرتمند دستکاری تاریخ و زمان است. برای ایجاد یک Carbon نمونه جدید، می توانید now تابع را فراخوانی کنید. این تابع به صورت جهانی در برنامه لاراول شما در دسترس است:

$now = now();

یا، می توانید یک Carbon نمونه جدید با استفاده از Illuminate\Support\Carbon کلاس ایجاد کنید:

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

برای بحث کامل در مورد کربن و ویژگی‌های آن، لطفاً به اسناد رسمی کربن مراجعه کنید .

بخت آزمایی

کلاس قرعه کشی لاراول ممکن است برای اجرای callback بر اساس مجموعه ای از شانس های داده شده استفاده شود. این می تواند به ویژه زمانی مفید باشد که شما فقط می خواهید کدی را برای درصدی از درخواست های دریافتی خود اجرا کنید:

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

می توانید کلاس قرعه کشی لاراول را با سایر ویژگی های لاراول ترکیب کنید. برای مثال، ممکن است بخواهید فقط درصد کمی از پرس و جوهای کند را به کنترل کننده استثناء خود گزارش دهید. و از آنجایی که کلاس قرعه کشی قابل فراخوانی است، ممکن است نمونه ای از کلاس را به هر متدی که فراخوانی ها را می پذیرد، ارسال کنیم:

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.')),
);

تست لاتاری

لاراول روش‌های ساده‌ای را ارائه می‌کند که به شما امکان می‌دهد به راحتی درخواست‌های قرعه‌کشی برنامه خود را آزمایش کنید:

// Lottery will always win...
Lottery::alwaysWin();
 
// Lottery will always lose...
Lottery::alwaysLose();
 
// Lottery will win then lose, and finally return to normal behavior...
Lottery::fix([true, false]);
 
// Lottery will return to normal behavior...
Lottery::determineResultsNormally();

خط لوله

نمای لاراول 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 متد فراخوانی می شود. به طور معمول، این قابل فراخوانی به سادگی ورودی داده شده را برمی گرداند.

البته، همانطور که قبلاً گفته شد، شما محدود به بستن خطوط لوله خود نیستید. شما همچنین می توانید کلاس های غیر قابل فراخوانی ارائه دهید. اگر یک نام کلاس ارائه شود، کلاس از طریق کانتینر سرویس لاراول نمونه سازی می شود و اجازه می دهد تا وابستگی ها به کلاس فراخوانی تزریق شوند:

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

خواب

کلاس لاراول Sleep یک بسته بندی سبک در اطراف توابع sleep و usleep توابع PHP است که قابلیت آزمایش بیشتری را ارائه می دهد و در عین حال یک API دوستدار توسعه دهنده را برای کار با زمان در معرض دید قرار می دهد:

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

این Sleep کلاس روش های مختلفی را ارائه می دهد که به شما امکان می دهد با واحدهای مختلف زمان کار کنید:

// Pause execution for 90 seconds...
Sleep::for(1.5)->minutes();
 
// Pause execution for 2 seconds...
Sleep::for(2)->seconds();
 
// Pause execution for 500 milliseconds...
Sleep::for(500)->milliseconds();
 
// Pause execution for 5,000 microseconds...
Sleep::for(5000)->microseconds();
 
// Pause execution until a given time...
Sleep::until(now()->addMinute());
 
// Alias of PHP's native "sleep" function...
Sleep::sleep(2);
 
// Alias of PHP's native "usleep" function...
Sleep::usleep(5000);

برای ترکیب آسان واحدهای زمان، می توانید از and روش زیر استفاده کنید:

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

تست خواب

هنگام آزمایش کدی که از 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_four_times()
{
Sleep::fake();
 
// ...
 
Sleep::assertSequence([
Sleep::for(1)->second(),
Sleep::for(2)->seconds(),
Sleep::for(3)->seconds(),
]);
}

البته، این Sleep کلاس اظهارات مختلفی را ارائه می دهد که می توانید هنگام آزمایش از آنها استفاده کنید:

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

گاهی اوقات ممکن است زمانی که یک خواب کاذب در کد برنامه شما رخ می دهد انجام یک عمل مفید باشد. برای رسیدن به این هدف، ممکن است یک فراخوان به روش ارائه دهید whenFakingSleep . در مثال زیر، ما از کمک‌کننده‌های دستکاری زمان لاراول برای پیشرفت فوری زمان بر اساس مدت زمان هر خواب استفاده می‌کنیم:

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

از آنجایی که زمان پیشرفت یک نیاز رایج است، این fake روش syncWithCarbon استدلالی را برای همگام نگه داشتن کربن در هنگام خواب در آزمایش می‌پذیرد:

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

لاراول Sleep هر زمان که اجرا را متوقف می کند از کلاس به صورت داخلی استفاده می کند. برای مثال، retry کمک‌کننده هنگام خواب از کلاس استفاده می‌کند Sleep ، که امکان آزمایش‌پذیری بهتر در هنگام استفاده از آن کمک‌کننده را فراهم می‌کند.