نسخه:

یادداشت های انتشار

طرح نسخه سازی

لاراول و سایر بسته‌های شخص اول آن از Semantic Versioning پیروی می‌کنند . نسخه‌های اصلی فریم‌ورک هر سال (~ فوریه) منتشر می‌شوند، در حالی که نسخه‌های جزئی و وصله ممکن است هر هفته منتشر شوند. نسخه های جزئی و پچ هرگز نباید حاوی تغییرات شکسته باشند.

هنگام ارجاع به چارچوب لاراول یا اجزای آن از برنامه یا بسته خود، همیشه باید از یک محدودیت نسخه مانند استفاده کنید ^8.0 ، زیرا نسخه های اصلی لاراول شامل تغییرات شکسته می شوند. با این حال، ما تلاش می‌کنیم همیشه اطمینان حاصل کنیم که می‌توانید یک نسخه اصلی جدید را در یک روز یا کمتر به‌روزرسانی کنید.

استثناها

آرگومان های نامگذاری شده

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

خط مشی پشتیبانی

برای تمامی نسخه‌های لاراول، رفع اشکال به مدت 18 ماه و رفع‌های امنیتی به مدت 2 سال ارائه می‌شود. برای همه کتابخانه‌های اضافی، از جمله Lumen، فقط آخرین نسخه اصلی رفع اشکال را دریافت می‌کند. علاوه بر این، لطفاً نسخه های پایگاه داده پشتیبانی شده توسط لاراول را بررسی کنید .

نسخه PHP (*) رهایی رفع اشکال تا زمانی که رفع امنیتی تا
6 (LTS) 7.2 - 8.0 3 سپتامبر 2019 25 ژانویه 2022 6 سپتامبر 2022
7 7.2 - 8.0 3 مارس 2020 6 اکتبر 2020 3 مارس 2021
8 7.3 - 8.1 8 سپتامبر 2020 26 جولای 2022 24 ژانویه 2023
9 8.0 - 8.1 8 فوریه 2022 8 آگوست 2023 6 فوریه 2024
10 8.1 7 فوریه 2023 6 آگوست 2024 4 فوریه 2025
پایان زندگی
فقط رفع‌های امنیتی

(*) نسخه های PHP پشتیبانی شده

لاراول 8

لاراول 8 با معرفی لاراول جت استریم، کلاس‌های کارخانه مدل، کوبیدن مهاجرت، دسته‌بندی شغل، بهبود محدود کردن نرخ، بهبود صف‌ها، اجزای Blade پویا، نمایش‌های صفحه‌بندی Tailwind، کمک‌کننده‌های تست زمان، بهبودهایی در، شنونده رویداد، به بهبودهای ایجاد شده در Laravel 7.x ادامه می‌دهد artisan serve . بهبودها، و انواع دیگر رفع اشکال و بهبود قابلیت استفاده.

لاراول جت استریم

Laravel Jetstream توسط Taylor Otwell نوشته شده است .

Laravel Jetstream یک داربست کاربردی با طراحی زیبا برای لاراول است. Jetstream نقطه شروع عالی برای پروژه بعدی شما را فراهم می کند و شامل ورود به سیستم، ثبت نام، تأیید ایمیل، احراز هویت دو مرحله ای، مدیریت جلسه، پشتیبانی API از طریق Laravel Sanctum و مدیریت اختیاری تیم است. لاراول جت استریم داربست UI احراز هویت قدیمی موجود برای نسخه های قبلی لاراول را جایگزین و بهبود می بخشد.

Jetstream با استفاده از Tailwind CSS طراحی شده است و داربست Livewire یا Inertia را انتخاب می کند .

دایرکتوری مدل ها

با تقاضای بسیار زیاد جامعه، اسکلت برنامه پیش‌فرض لاراول اکنون حاوی یک app/Models فهرست است. امیدواریم از این خانه جدید برای مدل های Eloquent خود لذت ببرید! تمام دستورات مولد مربوطه به‌روزرسانی شده‌اند تا فرض کنیم مدل‌ها در app/Models دایرکتوری وجود دارند. اگر دایرکتوری وجود نداشته باشد، چارچوب فرض می کند که مدل های شما باید در app دایرکتوری قرار گیرند.

کلاس های کارخانه مدل

کلاس های کارخانه مدل توسط تیلور اوتول ارائه شد .

کارخانه‌های مدل Eloquent کاملاً به‌عنوان کارخانه‌های مبتنی بر کلاس بازنویسی شده‌اند و بهبود یافته‌اند تا از پشتیبانی ارتباطی درجه یک برخوردار شوند. به عنوان مثال، UserFactory همراه با لاراول به این صورت نوشته شده است:

<?php
 
namespace Database\Factories;
 
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
 
class UserFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = User::class;
 
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'name' => $this->faker->name(),
'email' => $this->faker->unique()->safeEmail(),
'email_verified_at' => now(),
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'remember_token' => Str::random(10),
];
}
}

به لطف HasFactory ویژگی جدید موجود در مدل های تولید شده، کارخانه مدل ممکن است به این صورت استفاده شود:

use App\Models\User;
 
User::factory()->count(50)->create();

از آنجایی که کارخانه های مدل اکنون کلاس های ساده PHP هستند، تبدیل حالت ممکن است به عنوان متدهای کلاس نوشته شود. علاوه بر این، می‌توانید هر کلاس کمکی دیگری را در صورت نیاز به کارخانه مدل Eloquent خود اضافه کنید.

User به عنوان مثال، مدل شما ممکن است suspended حالتی داشته باشد که یکی از مقادیر مشخصه پیش فرض آن را تغییر دهد. شما می توانید تبدیل حالت خود را با استفاده از روش کارخانه پایه تعریف کنید state . شما می توانید روش حالت خود را هر چیزی که دوست دارید نام گذاری کنید. پس از همه، این فقط یک روش معمولی PHP است:

/**
* Indicate that the user is suspended.
*
* @return \Illuminate\Database\Eloquent\Factories\Factory
*/
public function suspended()
{
return $this->state([
'account_status' => 'suspended',
]);
}

پس از تعریف روش تبدیل حالت، ممکن است از آن به صورت زیر استفاده کنیم:

use App\Models\User;
 
User::factory()->count(5)->suspended()->create();

همانطور که گفته شد، کارخانه های مدل لاراول 8 دارای پشتیبانی درجه یک برای روابط هستند. بنابراین، با فرض اینکه User مدل ما یک posts متد رابطه دارد، ممکن است به سادگی کد زیر را برای ایجاد یک کاربر با سه پست اجرا کنیم:

$users = User::factory()
->hasPosts(3, [
'published' => false,
])
->create();

برای سهولت فرآیند ارتقا، بسته لاراول/کارخانه های میراثی منتشر شده است تا از نسخه قبلی کارخانه های مدل در لاراول 8.x پشتیبانی کند.

کارخانه های بازنویسی لاراول دارای ویژگی های بسیار بیشتری هستند که فکر می کنیم شما را دوست خواهید داشت. برای کسب اطلاعات بیشتر در مورد کارخانه های مدل، لطفاً به مستندات آزمایش پایگاه داده مراجعه کنید .

له کردن مهاجرت

له کردن مهاجرت توسط تیلور اوتول انجام شد .

همانطور که برنامه خود را می سازید، ممکن است به مرور زمان مهاجرت های بیشتری را جمع آوری کنید. این می تواند منجر به پر شدن دایرکتوری مهاجرت شما با صدها مهاجرت شود. اگر از MySQL یا PostgreSQL استفاده می‌کنید، اکنون می‌توانید مهاجرت‌های خود را در یک فایل SQL "لغز" کنید. برای شروع، schema:dump دستور را اجرا کنید:

php artisan schema:dump
 
// Dump the current database schema and prune all existing migrations...
php artisan schema:dump --prune

database/schema هنگامی که این دستور را اجرا می کنید، لاراول یک فایل "schema" در دایرکتوری شما می نویسد . اکنون، زمانی که می‌خواهید پایگاه داده خود را انتقال دهید و هیچ انتقال دیگری انجام نشده است، لاراول ابتدا SQL فایل طرحواره را اجرا می‌کند. پس از اجرای دستورات فایل طرحواره، لاراول هرگونه مهاجرت باقیمانده را که بخشی از schema dump نبوده، اجرا خواهد کرد.

Job Batching

دسته بندی کار توسط تیلور اوتول و محمد سعید انجام شد .

ویژگی Job Batching لاراول به شما این امکان را می‌دهد که به راحتی دسته‌ای از کارها را اجرا کنید و سپس زمانی که دسته‌ای از کارها اجرا شدند، اقداماتی را انجام دهید.

batch روش جدید Bus نما ممکن است برای ارسال دسته ای از مشاغل مورد استفاده قرار گیرد. البته، دسته بندی در درجه اول زمانی مفید است که با تماس های تکمیلی ترکیب شود. بنابراین، می‌توانید از روش‌های then ، catch و finally برای تعریف تماس‌های تکمیلی برای دسته استفاده کنید. Illuminate\Bus\Batch هر یک از این تماس‌ها در هنگام فراخوانی یک نمونه دریافت می‌کنند :

use App\Jobs\ProcessPodcast;
use App\Models\Podcast;
use Illuminate\Bus\Batch;
use Illuminate\Support\Facades\Bus;
use Throwable;
 
$batch = Bus::batch([
new ProcessPodcast(Podcast::find(1)),
new ProcessPodcast(Podcast::find(2)),
new ProcessPodcast(Podcast::find(3)),
new ProcessPodcast(Podcast::find(4)),
new ProcessPodcast(Podcast::find(5)),
])->then(function (Batch $batch) {
// All jobs completed successfully...
})->catch(function (Batch $batch, Throwable $e) {
// First batch job failure detected...
})->finally(function (Batch $batch) {
// The batch has finished executing...
})->dispatch();
 
return $batch->id;

برای کسب اطلاعات بیشتر در مورد دسته بندی شغل، لطفاً به اسناد صف مراجعه کنید .

بهبود محدودیت نرخ

بهبودهای محدود کننده نرخ توسط تیلور اوتول ارائه شد .

ویژگی محدودکننده نرخ درخواست لاراول با انعطاف‌پذیری و قدرت بیشتر تقویت شده است، در حالی که همچنان سازگاری با throttle API میان‌افزار نسخه قبلی را حفظ می‌کند.

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

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;
 
RateLimiter::for('global', function (Request $request) {
return Limit::perMinute(1000);
});

از آنجایی که تماس‌های محدودکننده نرخ نمونه درخواست HTTP ورودی را دریافت می‌کنند، می‌توانید محدودیت نرخ مناسب را به صورت پویا بر اساس درخواست ورودی یا کاربر تأیید شده ایجاد کنید:

RateLimiter::for('uploads', function (Request $request) {
return $request->user()->vipCustomer()
? Limit::none()
: Limit::perMinute(100);
});

گاهی اوقات ممکن است بخواهید محدودیت های نرخ را با مقدار دلخواه تقسیم کنید. به عنوان مثال، ممکن است بخواهید به کاربران اجازه دهید به ازای هر آدرس IP ۱۰۰ بار در دقیقه به یک مسیر معین دسترسی داشته باشند. by برای انجام این کار، هنگام ایجاد محدودیت نرخ می توانید از روش زیر استفاده کنید :

RateLimiter::for('uploads', function (Request $request) {
return $request->user()->vipCustomer()
? Limit::none()
: Limit::perMinute(100)->by($request->ip());
});

throttle محدودکننده‌های نرخ ممکن است با استفاده از میان‌افزار به مسیرها یا گروه‌های مسیر متصل شوند . میان افزار دریچه گاز نام محدود کننده نرخی که می خواهید به مسیر اختصاص دهید را می پذیرد:

Route::middleware(['throttle:uploads'])->group(function () {
Route::post('/audio', function () {
//
});
 
Route::post('/video', function () {
//
});
});

برای کسب اطلاعات بیشتر در مورد محدودیت نرخ، لطفاً به مستندات مسیریابی مراجعه کنید .

حالت تعمیر و نگهداری بهبود یافته

بهبود حالت نگهداری توسط تیلور اتول با الهام از Spatie انجام شد .

در نسخه‌های قبلی لاراول، php artisan down ویژگی حالت نگهداری ممکن است با استفاده از یک «لیست مجاز» از آدرس‌های IP که اجازه دسترسی به برنامه را داشتند، دور زده شود. این ویژگی به نفع یک راه حل ساده تر "راز" / رمز حذف شده است.

در حالت تعمیر و نگهداری، می توانید از این secret گزینه برای تعیین رمز عبور حالت نگهداری استفاده کنید:

php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515"

پس از قرار دادن برنامه در حالت تعمیر و نگهداری، می توانید به URL برنامه مطابق با این نشانه بروید و لاراول یک کوکی دور زدن حالت تعمیر و نگهداری را برای مرورگر شما صادر می کند:

https://example.com/1630542a-246b-4b66-afa1-dd72a4c43515

/ هنگام دسترسی به این مسیر پنهان، سپس به مسیر برنامه هدایت می شوید . هنگامی که کوکی برای مرورگر شما صادر شد، می توانید برنامه را به طور معمول مرور کنید که گویی در حالت تعمیر و نگهداری نیست.

پیش رندر نمای حالت نگهداری

اگر در حین استقرار از این فرمان استفاده کنید php artisan down ، کاربران شما ممکن است در صورت دسترسی به برنامه در زمانی که وابستگی های Composer یا سایر اجزای زیرساخت شما در حال به روز رسانی هستند، گهگاه با خطا مواجه شوند. این به این دلیل رخ می دهد که بخش قابل توجهی از چارچوب لاراول باید بوت شود تا مشخص شود برنامه شما در حالت تعمیر و نگهداری است و نمای حالت تعمیر و نگهداری را با استفاده از موتور قالب ارائه می دهد.

به همین دلیل، لاراول اکنون به شما اجازه می دهد تا یک نمای حالت تعمیر و نگهداری را پیش رندر کنید که در همان ابتدای چرخه درخواست بازگردانده می شود. این نمای قبل از بارگیری هر یک از وابستگی های برنامه شما ارائه می شود. می توانید با استفاده از گزینه down دستور ، یک الگوی انتخابی خود را از قبل رندر کنید render :

php artisan down --render="errors::503"

بسته شدن اعزام / زنجیر catch

بهبود صید توسط محمد سعید انجام شد .

با استفاده از روش جدید catch ، اکنون می‌توانید بسته‌ای را ارائه دهید که اگر بسته شدن در صف پس از اتمام تمام تلاش‌های مجدد پیکربندی شده صف شما با موفقیت کامل نشد، باید اجرا شود:

use Throwable;
 
dispatch(function () use ($podcast) {
$podcast->publish();
})->catch(function (Throwable $e) {
// This job has failed...
});

اجزای تیغه پویا

قطعات Dynamic Blade توسط Taylor Otwell ارائه شده است .

گاهی اوقات ممکن است لازم باشد یک کامپوننت را رندر کنید اما ندانید کدام کامپوننت باید تا زمان اجرا رندر شود. در این شرایط، اکنون می توانید از کامپوننت داخلی لاراول dynamic-component برای رندر کردن کامپوننت بر اساس مقدار یا متغیر زمان اجرا استفاده کنید:

<x-dynamic-component :component="$componentName" class="mt-4" />

برای کسب اطلاعات بیشتر در مورد اجزای Blade، لطفاً به مستندات Blade مراجعه کنید .

بهبود شنونده رویداد

بهبود شنوندگان رویداد توسط تیلور اوتول انجام شد .

اکنون ممکن است شنوندگان رویداد مبتنی بر بسته شدن فقط با انتقال بسته به Event::listen روش ثبت شوند. لاراول بسته شدن را بررسی می کند تا تشخیص دهد شنونده کدام نوع رویداد را مدیریت می کند:

use App\Events\PodcastProcessed;
use Illuminate\Support\Facades\Event;
 
Event::listen(function (PodcastProcessed $event) {
//
});

علاوه بر این، شنوندگان رویداد مبتنی بر بسته شدن ممکن است اکنون با استفاده از Illuminate\Events\queueable تابع زیر به‌عنوان صف‌پذیر علامت‌گذاری شوند:

use App\Events\PodcastProcessed;
use function Illuminate\Events\queueable;
use Illuminate\Support\Facades\Event;
 
Event::listen(queueable(function (PodcastProcessed $event) {
//
}));

مانند کارهای در صف، می توانید از متدهای onConnection ، onQueue و delay برای سفارشی کردن اجرای شنونده در صف استفاده کنید:

Event::listen(queueable(function (PodcastProcessed $event) {
//
})->onConnection('redis')->onQueue('podcasts')->delay(now()->addSeconds(10)));

catch اگر می‌خواهید شکست‌های شنونده در صف ناشناس را مدیریت کنید، می‌توانید هنگام تعریف شنونده، روش را ببندید queueable :

use App\Events\PodcastProcessed;
use function Illuminate\Events\queueable;
use Illuminate\Support\Facades\Event;
use Throwable;
 
Event::listen(queueable(function (PodcastProcessed $event) {
//
})->catch(function (PodcastProcessed $event, Throwable $e) {
// The queued listener failed...
}));

یاوران تست زمان

کمک‌کنندگان تست زمان توسط تیلور اتول با الهام از Ruby on Rails ارائه شدند .

هنگام آزمایش، ممکن است گهگاه نیاز به تغییر زمان برگشتی توسط کمک‌کنندگانی مانند now یا داشته باشید Illuminate\Support\Carbon::now() . کلاس تست ویژگی پایه لاراول اکنون شامل کمک هایی است که به شما امکان می دهد زمان فعلی را دستکاری کنید:

public function testTimeCanBeManipulated()
{
// Travel into the future...
$this->travel(5)->milliseconds();
$this->travel(5)->seconds();
$this->travel(5)->minutes();
$this->travel(5)->hours();
$this->travel(5)->days();
$this->travel(5)->weeks();
$this->travel(5)->years();
 
// Travel into the past...
$this->travel(-5)->hours();
 
// Travel to an explicit time...
$this->travelTo(now()->subHours(6));
 
// Return back to the present time...
$this->travelBack();
}

serve پیشرفت های صنعتگر

بهبودهای صنعتگر توسط تیلور اتول serve انجام شد .

هنگامی که تغییرات متغیر محیطی در فایل محلی شما شناسایی می شود، دستور Artisan serve با بارگیری مجدد خودکار بهبود یافته است .env . پیش از این، دستور باید به صورت دستی متوقف می شد و دوباره راه اندازی می شد.

نماهای صفحه بندی Tailwind

صفحه‌نمای لاراول برای استفاده از فریم ورک Tailwind CSS به‌طور پیش‌فرض به‌روزرسانی شده است. Tailwind CSS یک چارچوب CSS بسیار قابل تنظیم و سطح پایین است که تمام بلوک‌های ساختمانی مورد نیاز برای ساخت طرح‌های سفارشی را در اختیار شما قرار می‌دهد، بدون اینکه سبک‌های آزاردهنده‌ای که باید برای نادیده گرفتن آنها بجنگید. البته نماهای Bootstrap 3 و 4 نیز موجود هستند.

مسیریابی به‌روزرسانی‌های فضای نام

در نسخه‌های قبلی لاراول، این RouteServiceProvider دارای $namespace ویژگی بود. مقدار این ویژگی به طور خودکار بر روی تعاریف مسیر کنترلر و فراخوانی action کمک کننده / URL::action متد پیشوند می شود. در لاراول 8.x این ویژگی null به صورت پیش فرض است. این بدان معنی است که هیچ پیشوند فضای نام خودکار توسط لاراول انجام نخواهد شد. بنابراین، در برنامه های جدید Laravel 8.x، تعاریف مسیر کنترلر باید با استفاده از نحو استاندارد PHP قابل فراخوانی تعریف شود:

use App\Http\Controllers\UserController;
 
Route::get('/users', [UserController::class, 'index']);

فراخوانی‌های action متدهای مرتبط باید از همان نحو قابل فراخوانی استفاده کنند:

action([UserController::class, 'index']);
 
return Redirect::action([UserController::class, 'index']);

اگر پیشوند مسیر کنترلر سبک لاراول 7.x را ترجیح می دهید، می توانید به سادگی این $namespace ویژگی را به برنامه خود اضافه کنید RouteServiceProvider .

این تغییر فقط بر برنامه های جدید لاراول 8.x تأثیر می گذارد. $namespace برنامه های ارتقا یافته از Laravel 7.x همچنان این ویژگی را در خود خواهند داشت RouteServiceProvider .