مرا اسکن کن!

تغییرات لاراول 10 LARAVEL

تغییرات لاراول 10 LARAVEL



لاراول ۱۰  در تاریخ  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) برای تعیین اینکه آیا فرآیند هنوز در حال اجرا است استفاده کنید:

$process = Process::timeout(120)->start('bash import.sh');
 
while ($process->running()) {
    // ...
}
 
$result = $process->wait();

همانطور که ممکن است متوجه شده باشید، ممکن است متد wait را فراخوانی کنید تا منتظر بمانید تا اجرای فرآیند به پایان برسد و نمونه نتیجه فرآیند را بازیابی کنید:

$process = Process::timeout(120)->start('bash import.sh');
 
// ...
 
$result = $process->wait();

فرآیندها حتی ممکن است در استخرها شروع شوند که امکان اجرای راحت و مدیریت فرآیندهای همزمان را فراهم می کند:

use Illuminate\Process\Pool;
use Illuminate\Support\Facades\Pool;

[$first, $second, $third] = Process::concurrently(function (Pool $pool) {
    $pool->command('cat first.txt');
    $pool->command('cat second.txt');
    $pool->command('cat third.txt');
});

return $first->output();

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

Process::fake();

// ...

Process::assertRan('ls -la');

 

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

بهبود ظاهر سرویس های 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 را نیز حذف خواهد کرد. بنابراین، مهم است که هنگام تغییر نوع ستون، تمام ویژگی ها را اضافه کنید:

$table->bigInteger('user_balance')->unsigned()->default(0)->comment('balance')->change();

در مواردی که چندین اتصال پایگاه داده دارید و قبلاً doctrine/dbal را نصب کرده‌اید، توصیه می‌شود که متد Schema::useNativeSchemaOperationsIfPossible() را در متد بوت در App\Providers\AppServiceProvider فراخوانی کنید تا بتوانید از عملیات schema درلوکال خود از آن استفاده کنید. 

use IlluminateSupportFacadesSchema;
 
class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Schema::useNativeSchemaOperationsIfPossible();
    }
}

نوع ستون بازیابی بومی

یکی دیگر از ویژگی های قابل توجه لاراول 10 امکان استفاده از روش Schema::getColumnType بدون اتکا به پکیج doctrine/dbal است. ما در حال حاضر از Schema::getColumnType با doctrine/dbal برای بدست آوردن نوع ستون استفاده می کنیم. doctrine/dbal هر نوع ستون بومی را به معادل نوع doctrine/dbal خود نگاشت می‌کند و بسیاری از انواع ستون‌های مورد استفاده لاراول در پایگاه‌های داده مختلف را پشتیبانی نمی‌کند.

از سوی دیگر، در لاراول 10، روش جدید Schema::getColumnType نوع ستون واقعی را به جای معادل doctrine/dbal آن برمی گرداند. همچنین شما را قادر می سازد تا تست های یکپارچه سازی را برای ویژگی جدید تغییر ستون بومی بنویسید. می توانید از این ویژگی برای دریافت نام نوع داده یا کل تعریف نوع ستون مشخص شده استفاده کنید:

Schema::getColumnType('products', 'price'); // decimal

پشتیبانی از روش WhereExists() برای Eloquent Builder

در حال حاضر، استفاده از WhereExists () مستلزم پیکربندی کوئری تودرتو با استفاده از یک پکیج است. خوشبختانه، با لاراول ۱۰ ، اکنون می توان یک Eloquent Builder را به عنوان یک پرس و جوی تودرتو گنجاند. استفاده از روش های سازنده سفارشی، محدوده مدل و غیره را امکان پذیر می کند.

به عنوان مثال، اگر بخواهیم از WhereExists استفاده کنیم معمولاً این کار را انجام می دهیم:

Order::whereExists(function ($query) {
    $query->from('products')->whereColumn('products.order_id', 'orders.id');
});

با لاراول 10، می‌توانیم این کار را انجام دهیم:

Order::whereExists(
    Product::whereColumn('products.order_id', 'orders.id')
);

Eager Loading Optimization

یکی از ویژگی‌های جالب جدید لاراول 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 ممکن است برای ایجاد یک رمز عبور امن و تصادفی با طول مشخص استفاده شود. رمز عبور از ترکیبی از حروف، اعداد، نمادها و فاصله تشکیل شده است. به صورت پیش فرض،

use Illuminate\Support\Str;
 
$password = Str::password();
 
// 'EbJo2vE-AS:U,$%_gkrV4n,q~1xy/-_4'
 
$password = Str::password(12);
 
// 'qwuar>#V|i]N'

منسوخ شدن از لاراول 9

روش‌هایی که در لاراول 9 به‌عنوان منسوخ شده علامت‌گذاری شده‌اند در لاراول 10 حذف می‌شوند. می‌توانیم انتظار داشته باشیم که راهنمای ارتقای انتشار، تمام روش‌های منسوخ‌شده، ارزیابی تأثیر بالقوه، و نحوه ارتقاء نزدیک‌تر به نسخه را مشخص کند.

در اینجا برخی موارد منسوخ شده در مقایسه شاخه اصلی فریم ورک لاراول با شاخه 9.x در زمان نوشتن آورده شده است:

حذف موارد منسوخ شده Pull Request #41136

ویژگی تاریخ های منسوخ را در Pull Request شماره 42587 حذف کنید

روش handleDeprecation را در Pull Request #42590 حذف کنید

روش منسوخ شده assertTimesSent را حذف کنید درخواست Pull Request #42592

ویژگی منسوخ ScheduleListCommand $defaultName 419471e را حذف کنید

حذف روش منسوخ Route::home Pull Request #42614

قابلیت منسوخ شده dispatchNow را حذف کنید. pull request42591

تست لاراول ۱۰

اگر می‌خواهید اکنون آزمایش لاراول ۱۰ را شروع کنید، می‌توانید با استفاده از فلگ --dev آن را در یک پروژه جدید نصب کنید:

laravel new  --dev

 

برای بررسی repository لاراول و ستاره دادن به مخزن گیت هاب لاراول به لینک زیر مراجعه کنید :

Github Logomark


نوشته شده توسط :

وحید صمدیان وحید صمدیان



سه شنبه, 25 بهمن 1401

تعداد بازديد : 768

برچسب ها : فریم ورک لاراول

3.0 ستاره