لاراول ۱۰ در تاریخ 14 فوریه 2023 منتشر شد . در این پست از مگا وب ، می خواهیم تمام ویژگی ها و تغییرات جدیدی را که در مورد آنها می دانیم توضیح دهیم .
قبل از لاراول ۹ ، نسخه های اصلی فریم ورک دو بار در سال یا تقریباً هر شش ماه یکبار منتشر می شد. با شروع با لاراول ۹ ، تیم اصلی به یک برنامه سالانه رفت و لاراول ۹ را در فوریه 2022 ارسال کرد (به جای برنامه ریزی اولیه سپتامبر 2021) و سپس لاراول ۱۰ بعد از یک سال در در تاریخ 14 فوریه 2023 منتشر شد .
این برنامه بروزرسانی لاراول در آینده یک نسخه اصلی سالانه است :
لاراول ۹ : 8 فوریه 2022
لاراول ۱۰ : 14 فوریه 2023
لاراول ۱۱ : فوریه 2024
لاراول ۹ تا 8 آگوست 2023 به رفع باگ ها و تا 6 فوریه 2024 اصلاحات امنیتی ادامه خواهد داد.
میتوانید انتظار رفع اشکال لاراول ۱۰ را تا 6 آگوست 2024 و رفع مشکلات امنیتی تا 14 فوریه 2025 داشته باشید.
بیایید به برخی از ویژگی های جدید بزرگ لاراول ۱۰ نگاه کنیم :
لاراول ۱۰ از PHP 8.0 و نسخه های قدیمی تر آن پشتیبانی نمی کند
فریم ورک لاراول پشتیبانی از PHP <=v8.0 را در لاراول 10 حذف خواهد کرد . حداقل نسخه مورد نیاز PHP ^8.1 است . با مرور مقایسه بین master و 9.x، میتوان انتظار داشت که ویژگی های زبان پی اچ پی نسخه 8.1 در نسخه جدید فریم ورک لاراول استفاده شده ، مانند ویژگی readonly properties
Method Signature + Return Types
در انتشار های اولیه ، لاراول از تمام ویژگی های موجود در PHP در آن زمان استفاده کرد . با این حال ، بسیاری از ویژگیهای جدید در سالهای بعد به PHP اضافه شدهاند ، از جمله additional primitive type-hints, return types, و union types.
لاراول ۱۰ به طور کامل اسکلت فریم ورک و همه تکه کد های استفاده شده توسط فریمورک را برای معرفی آرگومان و برگرداندن انواع به همه امضاهای متد به روز می کند . علاوه بر این ، اطلاعات راهنمایی نوع «block doc» حذف شده است :
namespace App\Http\Controllers;
use App\Models\Flight;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class FlightController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(): Response
{
//
}
/**
* Display the specified resource.
*/
public function show(Flight $flight): Response
{
//
}
// ...
}
این تغییر backwards compatible است و کاملاً با برنامه های موجود قبلی سازگار است . بنابراین ، برنامه های موجود که این نکات نوع را ندارند به طور عادی به کار خود ادامه می دهند .
Laravel Pennant
Laravel Pennant یک رویکرد سبک و کارآمد برای مدیریت Feature Flags در برنامه شما ارائه میدهد . Pennant شامل یک درایور آرایه درون حافظه و یک درایور پایگاه داده برای ذخیره سازی دائمی ویژگی ها است .
Laravel Pennant بسته ای است که توسط تیم لاراول ایجاد شده است که با Laravel 10 ارائه می شود .
Feature Flags شما را قادر میسازد تا به تدریج ویژگیهای جدید برنامه را با اطمینان اجرا کنید ، طراحیهای رابط کاربری جدید A/B را آزمایش کنید، استراتژی توسعه مبتنی بر ترانک را تحسین کنید و موارد دیگر.
این بسته جدیدترین در مجموعه بسته های رسمی است که توسط تیم اصلی ارائه شده است و به این معنی است که ما اکنون یک بسته خوش ساخت و آزمایش شده داریم که عملکرد عالی را در اختیار ما قرار می دهد.
use Laravel\Pennant\Feature;
use Illuminate\Support\Lottery;
Feature::define('new-onboarding-flow', function () {
return Lottery::odds(1, 10);
});
هنگامی که یک ویژگی (feature) تعریف شد ، می توانید به راحتی تعیین کنید که آیا کاربر فعلی به ویژگی داده شده دسترسی دارد یا خیر :
if (Feature::active('new-onboarding-flow')) {
// ...
}
البته ، برای راحتی ، دستورالعمل های Blade نیز موجود است.
Pennant انواع ویژگی ها و API های پیشرفته تر را ارائه می دهد . برای اطلاعات بیشتر، لطفاً به مستندات جامع Pennant مراجعه کنید .
Processes (فرآیندها) در لاراول ۱۰
لاراول ۱۰ یک لایه انتزاعی زیبا برای شروع و تعامل با فرآیندهای خارجی از طریق نمای جدید Process معرفی می کند .
سرویس Laravel Process آزمایش و اجرای فرآیندهای CLI را به یک رویا تبدیل می کند.
برای فراخوانی یک فرآیند، می توانید از متد های run و start ارائه شده توسط نمای Process استفاده کنید . متد run یک فرآیند را فراخوانی می کند و منتظر می ماند تا اجرای فرآیند به پایان برسد، در حالی که روش start برای اجرای فرآیند ناهمزمان (asynchronous) استفاده می شود. ما هر دو رویکرد را در این جا بررسی خواهیم کرد. ابتدا، بیایید نحوه فراخوانی یک فرآیند پایه و همزمان و بررسی نتیجه آن را بررسی کنیم:
use Illuminate\Support\Facades\Process;
$result = Process::run('ls -la');
return $result->output();
Asynchronous Processes
در حالی که متد run فرآیندها را به صورت همزمان فراخوانی می کند ، متد start ممکن است برای فراخوانی یک فرآیند به صورت ناهمزمان (asynchronously) استفاده شود . این به برنامه شما اجازه میدهد تا زمانی که فرآیند در پسزمینه اجرا میشود، به انجام کارهای دیگر ادامه دهد. هنگامی که فرآیند فراخوانی شد، می توانید از روش در حال اجرا (running) برای تعیین اینکه آیا فرآیند هنوز در حال اجرا است استفاده کنید:
همانطور که ممکن است متوجه شده باشید، ممکن است متد wait را فراخوانی کنید تا منتظر بمانید تا اجرای فرآیند به پایان برسد و نمونه نتیجه فرآیند را بازیابی کنید:
برای اطلاعات بیشتر در مورد تعامل با فرآیندها ، لطفاً به مستندات فرآیند جامع مراجعه کنید.
بهبود ظاهر سرویس های Horizon / Telescope
Horizon و Telescope با ظاهری جدید و مدرن از جمله تایپوگرافی بهبود یافته، فاصله گذاری و طراحی به روز شده اند .
پشتیبانی از تغییر ستون بومی
در تلاش برای حذف نیاز به بسته doctrine/dbal هنگام استفاده از change() برای تغییر ستونها، ویژگی جدیدی به لاراول 10 میآید. این ویژگی به توسعهدهندگان اجازه میدهد تا از متد change() استفاده کنند و ستونها را در MySQL، PostgreSQL، و SQL SERVER تغییر دهند. بدون نیاز به پکیج های اضافی. این یک تغییر مهم و مخاطره آمیز است، اما ما معتقدیم که ارزش آن را دارد زیرا نیاز به پکیج اضافی را از بین می برد.
برای درک بهتر ویژگی جدید، به مثال زیر مراجعه کنید:
$table->integer('user_balance')->unsigned()->default(0)->comment('balance');
// `user_balance` is an integer, unsigned, defaults to '0', and column comment is 'balance'
حال، فرض میکنیم که یک ستون برای user_balance داریم و میخواهیم نوع آن را تغییر دهیم. با شروع از لاراول 10، به سادگی می توانیم این کار را انجام دهیم:
$table->bigInteger('user_balance')->change();
// This will change `user_balance` to bigInteger instead of just integer
کد بالا با موفقیت نوع ستون را تغییر میدهد، اما ویژگیهای UNSIGNED، DEFAULT و COMMENT را نیز حذف خواهد کرد. بنابراین، مهم است که هنگام تغییر نوع ستون، تمام ویژگی ها را اضافه کنید:
در مواردی که چندین اتصال پایگاه داده دارید و قبلاً doctrine/dbal را نصب کردهاید، توصیه میشود که متد Schema::useNativeSchemaOperationsIfPossible() را در متد بوت در App\Providers\AppServiceProvider فراخوانی کنید تا بتوانید از عملیات schema درلوکال خود از آن استفاده کنید.
یکی دیگر از ویژگی های قابل توجه لاراول 10 امکان استفاده از روش Schema::getColumnType بدون اتکا به پکیج doctrine/dbal است. ما در حال حاضر از Schema::getColumnType با doctrine/dbal برای بدست آوردن نوع ستون استفاده می کنیم. doctrine/dbal هر نوع ستون بومی را به معادل نوع doctrine/dbal خود نگاشت میکند و بسیاری از انواع ستونهای مورد استفاده لاراول در پایگاههای داده مختلف را پشتیبانی نمیکند.
از سوی دیگر، در لاراول 10، روش جدید Schema::getColumnType نوع ستون واقعی را به جای معادل doctrine/dbal آن برمی گرداند. همچنین شما را قادر می سازد تا تست های یکپارچه سازی را برای ویژگی جدید تغییر ستون بومی بنویسید. می توانید از این ویژگی برای دریافت نام نوع داده یا کل تعریف نوع ستون مشخص شده استفاده کنید:
پشتیبانی از روش WhereExists() برای Eloquent Builder
در حال حاضر، استفاده از WhereExists () مستلزم پیکربندی کوئری تودرتو با استفاده از یک پکیج است. خوشبختانه، با لاراول ۱۰ ، اکنون می توان یک Eloquent Builder را به عنوان یک پرس و جوی تودرتو گنجاند. استفاده از روش های سازنده سفارشی، محدوده مدل و غیره را امکان پذیر می کند.
به عنوان مثال، اگر بخواهیم از WhereExists استفاده کنیم معمولاً این کار را انجام می دهیم:
یکی از ویژگیهای جالب جدید لاراول 10، بهینهسازی بارگذاری مشتاقانه در زمانی است که هیچ کلیدی برای بارگذاری وجود ندارد. این تغییر بیشتر یک اصلاح است تا یک ویژگی، زیرا با یک مشکل فعلی مقابله می کند که در آن روابط بارگیری مشتاقانه باعث می شود تعداد زیادی از پرس و جوهای غیرممکن اجرا شوند.
در حال حاضر، وقتی مشتاق بارگیری روابطی است که هیچ کلیدی برای بارگیری ندارد، لاراول همچنان یک پرس و جو شبیه به این مورد را اجرا می کند. هر کلیدی در وهله اول در دسترس است، و در غیر این صورت، مجموعه ای خالی را فراهم می کند و نیازی به پرس و جوهای غیر ضروری پایگاه داده را از بین می برد.
Native type declarations در کد اسکلت فریم ورک لاراول ۱۰
در لاراول ۱۰ ، کد اسکلت برنامه دارای اعلانهای نوع بومی خواهد بود. این بدان معناست که هر کدی در سرزمین کاربر که توسط فریمورک تولید میشود، دارای نکات تایپ و انواع بازگشتی خواهد بود. مقاله ما در مورد اخطارها در مورد این رویکرد بحث میکند، و ما فکر میکنیم که هنگام ایجاد پروژههای جدید در آینده، انواع اضافه شده را دوست خواهید داشت.
انواع بهگونهای اضافه میشوند که جدیدترین ویژگیهای اشاره به نوع PHP را به پروژههای لاراول بدون شکستن سازگاری به عقب در سطح چارچوب میآورند:
Return types
Method arguments
Redundant annotations are removed where possible
Allow user land types in closure arguments
Does not include typed properties
Invokable Validation rules پیش فرض هستند
با شروع در لاراول ۱۰ ، قوانین اعتبار سنجی قابل فراخوانی اکنون پیش فرض هستند. هنگامی که یک قانون اعتبار سنجی جدید از طریق artisan ایجاد می کنید، این چیزی است که می توانید انتظار داشته باشید:
# Laravel 9 creates a rule class that implements the
# Illuminate\Contracts\Validation\Rule interface
artisan make:rule Uppercase
# Laravel 9 flag to create an invokable and implicit rule
artisan make:rule Uppercase --invokable
artisan make:rule Uppercase --invokable --implicit
# Laravel 10 creates an invokable rule by default
artisan make:rule Uppercase
# Laravel 10 implicit rule
artisan make:rule Uppercase --implicit
گزینه پروفایل (Profile) برای تست ها
ویژگی جدیدی که به لاراول ۱۰ می آید یک گزینه --profile است که یافتن تست های کند را برای شما آسان می کند.
این گزینه --profile باید به شما کمک کند تا تستهایتان را سریع نگه دارید و به شما کمک کند تستهای کند را برطرف کنید یا آنها را بهتر گروهبندی کنید تا نتوانید همیشه آنها را اجرا نکنید.
New String Password helper
روش Str::password ممکن است برای ایجاد یک رمز عبور امن و تصادفی با طول مشخص استفاده شود. رمز عبور از ترکیبی از حروف، اعداد، نمادها و فاصله تشکیل شده است. به صورت پیش فرض،
روشهایی که در لاراول 9 بهعنوان منسوخ شده علامتگذاری شدهاند در لاراول 10 حذف میشوند. میتوانیم انتظار داشته باشیم که راهنمای ارتقای انتشار، تمام روشهای منسوخشده، ارزیابی تأثیر بالقوه، و نحوه ارتقاء نزدیکتر به نسخه را مشخص کند.
در اینجا برخی موارد منسوخ شده در مقایسه شاخه اصلی فریم ورک لاراول با شاخه 9.x در زمان نوشتن آورده شده است: