یادداشت های انتشار
طرح نسخه سازی
لاراول و سایر بستههای شخص اول آن از Semantic Versioning پیروی میکنند . نسخههای اصلی فریمورک هر سال منتشر میشوند (~Q1)، در حالی که نسخههای فریمورک و پچ ممکن است هر هفته منتشر شوند. نسخه های جزئی و پچ هرگز نباید حاوی تغییرات شکسته باشند.
هنگام ارجاع به چارچوب لاراول یا اجزای آن از برنامه یا بسته خود، همیشه باید از یک محدودیت نسخه مانند استفاده کنید
^11.0
، زیرا نسخه های اصلی لاراول شامل تغییرات شکسته می شوند. با این حال، ما تلاش میکنیم همیشه اطمینان حاصل کنیم که میتوانید یک نسخه اصلی جدید را در یک روز یا کمتر بهروزرسانی کنید.
آرگومان های نامگذاری شده
آرگومان های نامگذاری شده توسط دستورالعمل های سازگاری با عقب لاراول پوشش داده نمی شوند. ممکن است در صورت لزوم تغییر نام آرگومان های تابع را برای بهبود پایگاه کد لاراول انتخاب کنیم. بنابراین، استفاده از آرگومان های نامگذاری شده هنگام فراخوانی متدهای لاراول باید با احتیاط و با درک این موضوع انجام شود که نام پارامترها ممکن است در آینده تغییر کند.
خط مشی پشتیبانی
برای تمامی نسخههای لاراول، رفع اشکال به مدت 18 ماه و رفعهای امنیتی به مدت 2 سال ارائه میشود. برای همه کتابخانههای اضافی، از جمله Lumen، فقط آخرین نسخه اصلی رفع اشکال را دریافت میکند. علاوه بر این، لطفاً نسخه های پایگاه داده پشتیبانی شده توسط لاراول را بررسی کنید .
نسخه | PHP (*) | رهایی | رفع اشکال تا زمانی که | رفع امنیتی تا |
---|---|---|---|---|
9 | 8.0 - 8.2 | 8 فوریه 2022 | 8 آگوست 2023 | 6 فوریه 2024 |
10 | 8.1 - 8.3 | 14 فوریه 2023 | 6 آگوست 2024 | 4 فوریه 2025 |
11 | 8.2 - 8.3 | 12 مارس 2024 | 3 سپتامبر 2025 | 12 مارس 2026 |
12 | 8.2 - 8.3 | Q1 2025 | Q3، 2026 | Q1، 2027 |
(*) نسخه های PHP پشتیبانی شده
لاراول 11
لاراول 11 به بهبودهای ایجاد شده در Laravel 10.x با معرفی یک ساختار برنامه کاربردی، محدود کردن سرعت در هر ثانیه، مسیریابی سلامت، چرخش کلید رمزگذاری زیبا، بهبود تست صف، حمل و نقل مجدد نامه، ادغام اعتبارسنجی سریع، دستورات Artisan جدید و موارد دیگر، به بهبودهای ایجاد شده ادامه می دهد. . علاوه بر این، Laravel Reverb، یک سرور WebSocket مقیاس پذیر شخص اول، معرفی شده است تا قابلیت های قوی در زمان واقعی را به برنامه های شما ارائه دهد.
PHP 8.2
Laravel 11.x به حداقل نسخه PHP 8.2 نیاز دارد.
ساختار کاربردی ساده
ساختار برنامه کاربردی لاراول توسط تیلور اوتول و نونو مادورو توسعه داده شد .
لاراول 11 یک ساختار کاربردی ساده را برای برنامه های جدید لاراول، بدون نیاز به تغییر در برنامه های موجود، معرفی می کند. ساختار برنامه جدید برای ارائه یک تجربه مدرن تر و سبک تر در نظر گرفته شده است، در حالی که بسیاری از مفاهیمی را که توسعه دهندگان لاراول قبلاً با آنها آشنا هستند حفظ می کند. در زیر به نکات برجسته ساختار اپلیکیشن جدید لاراول خواهیم پرداخت.
فایل بوت استرپ برنامه
فایل
bootstrap/app.php
به عنوان فایل پیکربندی برنامه کد اول احیا شده است. از این فایل، اکنون میتوانید مسیریابی، میانافزار، ارائهدهندگان خدمات، مدیریت استثناها و موارد دیگر را سفارشی کنید. این فایل انواع تنظیمات رفتار برنامه کاربردی در سطح بالا را که قبلاً در ساختار فایل برنامه شما پراکنده بودند، یکپارچه می کند:
return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { // }) ->withExceptions(function (Exceptions $exceptions) { // })->create();
ارائه دهندگان خدمات
به جای ساختار برنامه پیشفرض لاراول که شامل پنج ارائهدهنده خدمات است، لاراول 11 تنها شامل یک سرویس است
AppServiceProvider
. عملکرد ارائه دهندگان خدمات قبلی در ادغام شده است
bootstrap/app.php
، به طور خودکار توسط چارچوب مدیریت می شود، یا ممکن است در برنامه شما قرار گیرد
AppServiceProvider
.
برای مثال، کشف رویداد اکنون به طور پیشفرض فعال است، که تا حد زیادی نیاز به ثبت دستی رویدادها و شنوندگان آنها را از بین میبرد. با این حال، اگر نیاز به ثبت دستی رویدادها دارید، میتوانید این کار را به سادگی در قسمت انجام دهید
AppServiceProvider
. به طور مشابه، اتصالات مدل مسیر یا گیتهای مجوزی که ممکن است قبلاً در آن ثبتنام کرده باشید
AuthServiceProvider
نیز ممکن است در آن ثبت شوند
AppServiceProvider
.
API و Broadcast Routing را انتخاب کنید
فایلهای مسیر
api.php
و
channels.php
مسیر دیگر بهطور پیشفرض وجود ندارند، زیرا بسیاری از برنامهها به این فایلها نیاز ندارند. در عوض، آنها ممکن است با استفاده از دستورات Artisan ساده ایجاد شوند:
php artisan install:api php artisan install:broadcasting
میان افزار
پیش از این، برنامه های جدید لاراول شامل 9 میان افزار بود. این میان افزارها وظایف مختلفی مانند احراز هویت درخواست ها، برش رشته های ورودی و اعتبارسنجی توکن های CSRF را انجام می دادند.
در لاراول 11، این میان افزارها به خود فریمورک منتقل شده اند تا حجم زیادی به ساختار برنامه شما اضافه نکنند. روشهای جدیدی برای سفارشیسازی رفتار این میانافزار به چارچوب اضافه شدهاند و ممکن است از
bootstrap/app.php
فایل برنامه شما فراخوانی شوند:
->withMiddleware(function (Middleware $middleware) { $middleware->validateCsrfTokens( except: ['stripe/*'] ); $middleware->web(append: [ EnsureUserIsSubscribed::class, ])})
از آنجایی که همه میان افزارها را می توان به راحتی از طریق برنامه شما سفارشی کرد
bootstrap/app.php
، نیاز به کلاس "هسته" HTTP جداگانه حذف شده است.
برنامه ریزی
با استفاده از نمای جدید
Schedule
، وظایف زمانبندیشده ممکن است اکنون مستقیماً در فایل برنامه شما تعریف شوند
routes/console.php
و نیاز به کلاس «هسته» کنسول جداگانه را از بین ببرند:
use Illuminate\Support\Facades\Schedule; Schedule::command('emails:send')->daily();
رسیدگی به استثنا
مانند مسیریابی و میانافزار، مدیریت استثناها اکنون میتواند از فایل برنامه شما
bootstrap/app.php
بهجای یک کلاس کنترلکننده استثنا جداگانه سفارشیسازی شود و تعداد کلی فایلهای موجود در یک برنامه جدید لاراول را کاهش دهد:
->withExceptions(function (Exceptions $exceptions) { $exceptions->dontReport(MissedFlightException::class); $exceptions->report(function (InvalidOrderException $e) { // ... });})
Controller
کلاس
پایه
کنترل کننده پایه موجود در برنامه های جدید لاراول ساده شده است. این دیگر کلاس داخلی لاراول را گسترش نمیدهد
Controller
، و صفات
AuthorizesRequests
و
ValidatesRequests
حذف شدهاند، زیرا در صورت تمایل میتوانند در کنترلکنندههای برنامه شما گنجانده شوند:
<?php namespace App\Http\Controllers; abstract class Controller{ //}
پیش فرض های برنامه
به طور پیش فرض، برنامه های جدید لاراول از SQLite برای ذخیره سازی پایگاه داده و همچنین
database
از درایور جلسه، کش و صف لاراول استفاده می کنند. این به شما امکان می دهد بلافاصله پس از ایجاد یک برنامه جدید لاراول، بدون نیاز به نصب نرم افزار اضافی یا ایجاد مهاجرت های اضافی پایگاه داده، ساخت برنامه خود را شروع کنید.
علاوه بر این، با گذشت زمان،
database
درایورهای این سرویس های لاراول به اندازه کافی برای استفاده تولید در بسیاری از زمینه های برنامه قوی شده اند. بنابراین، آنها یک انتخاب معقول و یکپارچه برای کاربردهای محلی و تولیدی ارائه می دهند.
لاراول ریورب
Laravel Reverb توسط Joe Dixon ساخته شده است .
Laravel Reverb ارتباطات بلادرنگ WebSocket فوق العاده سریع و مقیاس پذیر را مستقیماً به برنامه لاراول شما می آورد و با مجموعه ابزارهای پخش رویداد موجود لاراول مانند Laravel Echo یکپارچه سازی یکپارچه را فراهم می کند.
php artisan reverb:start
علاوه بر این، Reverb از مقیاس افقی از طریق قابلیتهای انتشار/اشتراک Redis پشتیبانی میکند و به شما این امکان را میدهد تا ترافیک WebSocket خود را در چندین سرور Reverb باطن توزیع کنید که همگی از یک برنامه واحد و با تقاضای بالا پشتیبانی میکنند.
برای اطلاعات بیشتر در مورد Laravel Reverb، لطفاً به مستندات کامل Reverb مراجعه کنید .
محدودیت نرخ در هر ثانیه
محدود کردن نرخ در هر ثانیه توسط تیم مک دونالد ارائه شد .
لاراول اکنون از محدودیت نرخ «در ثانیه» برای همه محدودکنندههای نرخ، از جمله موارد درخواستهای HTTP و کارهای در صف پشتیبانی میکند. پیش از این، محدود کنندههای نرخ لاراول به جزئیات «در دقیقه» محدود میشد:
RateLimiter::for('invoices', function (Request $request) { return Limit::perSecond(1);});
برای اطلاعات بیشتر در مورد محدودیت نرخ در لاراول، اسناد محدود کننده نرخ را بررسی کنید .
مسیریابی سلامت
مسیریابی سلامت توسط تیلور اوتول ارائه شد .
برنامه های جدید لاراول 11 شامل یک
health
دستورالعمل مسیریابی هستند که به لاراول دستور می دهد یک نقطه پایانی ساده برای بررسی سلامت تعریف کند که ممکن است توسط سرویس های نظارت بر سلامت برنامه های شخص ثالث یا سیستم های هماهنگ سازی مانند Kubernetes فراخوانی شود. به طور پیش فرض، این مسیر در آدرس زیر ارائه می شود
/up
:
->withRouting( web: __DIR__.'/../routes/web.php', commands: __DIR__.'/../routes/console.php', health: '/up',)
وقتی درخواستهای HTTP به این مسیر ارسال میشود، لاراول یک
DiagnosingHealth
رویداد را نیز ارسال میکند و به شما امکان میدهد تا بررسیهای سلامت بیشتری را انجام دهید که مربوط به برنامه شما هستند.
چرخش کلید رمزگذاری برازنده
چرخش کلید رمزگذاری برازنده توسط تیلور اوتول انجام شد .
از آنجایی که لاراول همه کوکی ها، از جمله کوکی جلسه برنامه شما را رمزگذاری می کند، اساساً هر درخواستی از برنامه لاراول به رمزگذاری متکی است. با این حال، به همین دلیل، چرخاندن کلید رمزگذاری برنامه شما، همه کاربران را از برنامه شما خارج می کند. علاوه بر این، رمزگشایی داده هایی که توسط کلید رمزگذاری قبلی رمزگذاری شده بودند غیرممکن می شود.
لاراول 11 به شما این امکان را می دهد که کلیدهای رمزگذاری قبلی برنامه خود را از طریق
APP_PREVIOUS_KEYS
متغیر محیطی به عنوان یک لیست محدود شده با کاما تعریف کنید.
هنگام رمزگذاری مقادیر، لاراول همیشه از کلید رمزگذاری "جاری" استفاده می کند که در
APP_KEY
متغیر محیطی قرار دارد. هنگام رمزگشایی مقادیر، لاراول ابتدا کلید فعلی را امتحان می کند. اگر رمزگشایی با استفاده از کلید فعلی ناموفق باشد، لاراول تمام کلیدهای قبلی را امتحان می کند تا زمانی که یکی از کلیدها قادر به رمزگشایی مقدار باشد.
این رویکرد برای رمزگشایی زیبا به کاربران اجازه میدهد تا بدون وقفه از برنامه شما استفاده کنند، حتی اگر کلید رمزگذاری شما چرخانده شود.
برای اطلاعات بیشتر در مورد رمزگذاری در لاراول، اسناد رمزگذاری را بررسی کنید .
اصلاح خودکار رمز عبور
بازنویسی خودکار رمز عبور توسط استفان ریس-کارتر ارائه شده است .
الگوریتم پیش فرض هش رمز عبور لاراول bcrypt است. "فاکتور کار" برای هش های bcrypt را می توان از طریق
config/hashing.php
فایل پیکربندی یا
BCRYPT_ROUNDS
متغیر محیطی تنظیم کرد.
به طور معمول، با افزایش قدرت پردازش CPU/GPU، ضریب کار bcrypt باید در طول زمان افزایش یابد. اگر ضریب کار bcrypt را برای برنامه خود افزایش دهید، لاراول اکنون با ظرافت و به طور خودکار رمزهای عبور کاربر را با احراز هویت کاربران با برنامه شما بازنویسی می کند.
اعتبار سنجی سریع
ادغام اعتبارسنجی سریع توسط آندریا مارکو سارتوری ارائه شد .
Laravel Prompts یک بسته PHP برای افزودن فرمهای زیبا و کاربرپسند به برنامههای خط فرمان شما، با ویژگیهای مرورگر مانند متن مکاننما و اعتبارسنجی است.
Laravel Prompts از اعتبارسنجی ورودی از طریق بسته شدن پشتیبانی می کند:
$name = text( label: 'What is your name?', validate: fn (string $value) => match (true) { strlen($value) < 3 => 'The name must be at least 3 characters.', strlen($value) > 255 => 'The name must not exceed 255 characters.', default => null });
با این حال، این ممکن است در هنگام برخورد با بسیاری از ورودیها یا سناریوهای اعتبارسنجی پیچیده، دشوار شود. بنابراین، در لاراول 11، میتوانید از تمام قدرت اعتباردهنده لاراول هنگام اعتبارسنجی ورودیهای سریع استفاده کنید:
$name = text('What is your name?', validate: [ 'name' => 'required|min:3|max:255',]);
تست تعامل صف
تست تعامل صف توسط تیلور اوتول ارائه شد .
قبلاً، تلاش برای آزمایش اینکه یک کار در صف منتشر شده، حذف شده است یا به صورت دستی ناموفق بوده است، دشوار بود و نیاز به تعریف جعلی و خرد صف سفارشی داشت. با این حال، در لاراول 11، می توانید به راحتی این فعل و انفعالات صف را با استفاده از
withFakeQueueInteractions
روش زیر آزمایش کنید:
use App\Jobs\ProcessPodcast; $job = (new ProcessPodcast)->withFakeQueueInteractions(); $job->handle(); $job->assertReleased(delay: 30);
برای اطلاعات بیشتر در مورد آزمایش مشاغل در صف، اسناد صف را بررسی کنید .
دستورات صنعتگران جدید
دستورات Artisan ایجاد کلاس توسط Taylor Otwell ارائه شد .
دستورات Artisan جدیدی اضافه شده اند تا امکان ایجاد سریع کلاس ها، enums، رابط ها و ویژگی ها را فراهم کنند:
php artisan make:classphp artisan make:enumphp artisan make:interfacephp artisan make:trait
بهبود قالبهای مدل
نونو مادورو به بهبود بازیگران مدل کمک کرد .
لاراول 11 از تعریف کست های مدل شما با استفاده از یک متد به جای ویژگی پشتیبانی می کند. این اجازه می دهد تا تعاریف بازیگران روان و روان، به ویژه هنگام استفاده از بازیگران با آرگومان ها:
/** * Get the attributes that should be cast. * * @return array<string, string> */protected function casts(): array{ return [ 'options' => AsCollection::using(OptionCollection::class), // AsEncryptedCollection::using(OptionCollection::class), // AsEnumArrayObject::using(OptionEnum::class), // AsEnumCollection::using(OptionEnum::class), ];}
برای اطلاعات بیشتر در مورد ریخته گری ویژگی، مستندات Eloquent را مرور کنید .
کارکرد
once
تیلور اوتول
once
و
نونو مادورو
به کمک کمک
کمک کردند
.
تابع
once
helper فراخوان داده شده را اجرا می کند و نتیجه را برای مدت زمان درخواست در حافظه پنهان می کند. هر فراخوانی بعدی به
once
تابع با همان پاسخ تماس، نتیجه ذخیرهشده قبلی را برمیگرداند:
function random(): int{ return once(function () { return random_int(1, 1000); });} random(); // 123random(); // 123 (cached result)random(); // 123 (cached result)
برای اطلاعات بیشتر در مورد Helper،
مستندات Helpers را
once
بررسی کنید
.
بهبود عملکرد هنگام آزمایش با پایگاه های داده درون حافظه
بهبود عملکرد تست پایگاه داده در حافظه توسط Anders Jenbo ارائه شد
:memory:
لاراول 11 هنگام استفاده از پایگاه داده SQLite در طول آزمایش،
سرعت قابل توجهی را افزایش می دهد .
برای انجام این کار، لاراول اکنون یک ارجاع به شی PDO PHP را حفظ می کند و از آن در سراسر اتصالات استفاده مجدد می کند و اغلب زمان اجرای آزمایش را به نصف کاهش می دهد.
پشتیبانی بهبود یافته برای MariaDB
پشتیبانی بهبود یافته برای MariaDB توسط Jonas Staudenmeir و Julius Kiekbusch ارائه شد
لاراول 11 شامل پشتیبانی بهبود یافته برای MariaDB است. در نسخه های قبلی لاراول، می توانید از MariaDB از طریق درایور MySQL لاراول استفاده کنید. با این حال، لاراول 11 اکنون شامل یک درایور اختصاصی MariaDB است که پیش فرض های بهتری را برای این سیستم پایگاه داده ارائه می دهد.
برای اطلاعات بیشتر در مورد درایورهای پایگاه داده لاراول، مستندات پایگاه داده را بررسی کنید .
بازرسی پایگاه های داده و بهبود عملیات طرحواره
بهبود عملیات طرحواره و بازرسی پایگاه داده توسط حافظ دیواندری انجام شد
لاراول 11 روش های عملیاتی و بازرسی طرحواره پایگاه داده اضافی، از جمله اصلاح بومی، تغییر نام و حذف ستون ها را ارائه می دهد. علاوه بر این، انواع فضایی پیشرفته، نامهای طرحواره غیرپیشفرض، و روشهای طرحواره بومی برای دستکاری جداول، نماها، ستونها، فهرستها و کلیدهای خارجی ارائه شدهاند:
use Illuminate\Support\Facades\Schema; $tables = Schema::getTables();$views = Schema::getViews();$columns = Schema::getColumns('users');$indexes = Schema::getIndexes('users');$foreignKeys = Schema::getForeignKeys('users');