Sokan Academy

ویژگی های جدید لاراول 10

ویژگی های جدید لاراول 10

در حالی که این مقاله را می خوانید نسخه 10 فریم ورک محبوب لاراول عرضه شده است. قبل از لاراول 9، نسخه های اصلی فریم ورک هر شش ماه یکبارعرضه می شدند. بعد از لاراول 9، تیم توسعه دهنده تصمیم گرفت تا نسخه های اصلی را به صورت سالانه عرضه کند و به جای آن هر هفته یک نسخه minor (جزئی) جدید در اختیار توسعه دهنده ها قرار دهد. این شیوه باعث می شود تا بدون زیاد شدن نسخه اصلی و ایجاد breaking change (تغییراتی که باعث از کار افتادن کد های قبلی می شود) بتوانیم از قابلیت ها و بهبود های جدید بهره مند شویم. من قصد دارم طی چند مقاله مهم ترین و کاربردی ترین تغییرات لاراول از ابتدای عرضه نسخه 9 تا امروز را با شما به اشتراک بگذارم. ابتدا با تغییرات مهم تر شروع می کنیم:

👈توجه: همانطور که گفته شد در این مقاله مهم ترین تغییرات لاراول از ابتدای نسخه 9 تا امروز مطرح می‌شود که مناسب برنامه نویس هایی است که با لاراول آشنایی کافی دارند. اما اگر شما به دنبال یادگیری لاراول هستید؛ می‌توانید به دوره آموزش لاراول سکان آکادمی مراجعه کنید.

نسخه 8 PHP در لاراول 10 پشتیبانی نمی شود

لاراول 10 از نسخه های 8 و پایین تر زبان PHP دیگر پشتیبانی نمی کند. بنابراین برای استفاده از لاراول 10 باید PHP 8.1 یا بالاتر از آن را استفاده کنید. در کد های لاراول از قابلیت های جدید زبان PHP هم استفاده شده است.

پشتیبانی از PHP 8.2

نسخه 8.2 زیان PHP دو ماه قبل از عرضه لاراول 10 در اختیار توسعه دهنده ها قرار گرفت. با تلاش های تیم لاراول، در نسخه 10 این فریم ورک شما می توانید از PHP 8.2 بدون هیچ مشکلی استفاده کنید. پشتیبانی لاراول از PHP 8.2 تنها به فریم ورک محدود نمی شود و همه پکیج های رسمی لاراول هم از این نسخه جدید PHP پشتیبانی می کنند.

پکیج Pennant

Laravel Pennant پکیج جدیدی است که با کمک آن می توانید در برنامه های خود Feature Flag داشته باشید. Feature flag ها به شما این امکان را می دهند تا قابلیت های جدید برنامه تان را به مرور در اختیار کاربران قرار دهید. همچنین با استفاده از آن ها امکان انجام تست های A/B و پیاده سازی سایر استراتژی های مرسوم در عرضه قابلیت های جدید در اختیار شما قرار خواهد گرفت. برای نمونه کد زیر یک قابلیت را تعریف می کند:

Feature::define('beta-testers', fn (User $user) => match (true) {
        $user->isBetaTester() => true,
        default => false,
    });

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

  if (Feature::active('beta-tester')) {
            // do sth
        }

کلاس جدید Process در لاراول 10

با استفاده از کلاس جدید Process در لاراول 10، تست کردن و اجرای دستور های CLI از همیشه راحت تر خواهد شد.

use Illuminate\Support\Facades\Process;
 
$result = Process::run('ls -la');
 
$result->successful();
$result->failed();
$result->exitCode();
$result->output();
$result->errorOutput();
$result->throw();
$result->throwIf($condition);

برخی از قابلیت هایی که این کلاس برای ما فراهم می کند عبارت اند از:

  • متد های خوانا با قابلیت صدا زدن پشت سر هم برای ایجاد یک شی Process قبل از اجرا
  • هندل کردن خروجی پردازش ها، زمانی که دریافت می شوند
  • اجرای پردازش ها به صورت موازی
  • جلوگیری از اجرای واقعی پردازش ها هنگام اجرای تست ها

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

کد زیر نمونه ای از صدا زدن متد های کلاس Process پشت سر هم است:

$result = Process::timeout(60)->path(base_path())->env([...])->run('ls -la');

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

Process::fake([
  'ls *' => Process::result('Hello From Kinsta'),
]);

تعریف type ها در اسکلت پیش فرض لاراول 10

لاراول از DocBlock ها در کد های خود استفاده می کرد تا مشخص کند که یک تکه کد چه کاری انجام می دهد و ورودی ها و خروجی آن چه ویژگی هایی دارند. اما به لطف type های تعریف شده در لارول 10 این شیوه تغییر خواهد کرد. برای نمونه کد زیر را در نظر بگیرید:

/**
* Determine whether the user can create models.
*
* @param User $user
* @return IlluminateAuthAccessResponse|bool
*/

public function create($user)
{
  //
}

در لاراول 10 کد بالا به صورت زیر تغییر کرده است:

/**
* Determine whether the user can create models.
*/

public function create(User $user): bool
{
  //
}

همچنین هنگامی که لاراول 10 را نصب می کنید، بیشتر متد ها دارای type مشخص خواهند بود. هر کدی که توسط فریم ورک ایجاد می شود (مانند کنترلر ها) هم به صورت کامل دارای type است. این قابلیت زمانی که می خواهید یک پروژه جدید ایجاد کنید بسیار کاربردی خواهد بود. همچنین اضافه شدن این قابلیت به لاراول 10 باعث ایجاد هیچ breaking change ای نمی شود.

گزینه profile-- برای اجرای تست ها

با استفاده از گزینه profile-- هنگام اجرای تست ها، شما می توانید تست های کند برنامه تان را پیدا کنید. این قابلیت به شما کمک می کند تا تست های سریع تری بنویسید یا تست هایی که کند هستند را به گونه ای دسته بندی کنید که با هر بار اجرای تست های برنامه، اجرا نشوند.

متدی برای ایجاد کلمه عبور

متد Str::password می تواند یک کلمه عبور تصادفی و امن با طول خواسته شده ایجاد کند. رمز عبور ایجاد شده شامل حروف، اعداد، نشانه های خاص و فاصله می شود. به طور پیش فرض این متد رمز عبور هایی با طول 32 ایجاد خواهد کرد.

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

الگوریتم Hashing سریع تر

در نسخه 8.1 زبان PHP الگوریتم xxh128 اضافه شد که سرعت و امنیت بالایی دارد. با توجه به اینکه لاراول از نسخه 8.1 PHP بهره می برد، از این پس، از این الگوریتم بهینه هنگام hashing داده ها استفاده خواهد شد.

کار راحت تر با دستور های make

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

راحت تر کار کردن با دستور های make در لاراول 10

بعد:

لاراول 10در  کنسول آرتیسان از شما سوال های مختلفی می پرسد

بهبود بهره وری Eager load در لاراول 10

یکی از ویژگی های جالب لاراول 10 بهبود بهره وری عملیات Eager load در زمانی است که هیچ کلید خارجی ای برای load کردن وجود ندارد. در واقع این مورد را می توانیم بیشتر یک باگ فیکس در نظر بگیریم. در حال حاضر Eager load کردن رابطه ای که هیچ کلیدی برای load شدن ندارد منجر به اجرای کوئری ای مانند زیر می شود:

select * from `table_name` where 0 = 1

در لاراول 10 قبل از اجرای کوئری بررسی می شود که آیا کلیدی برای load شدن وجود دارد یا نه. اگر کلیدی نباشد هیچ کوئری ای اجرا نخواهد شد و یک collection خالی به عنوان نتیجه قرار خواهد گرفت.

دیگر برای تغییر ستون های دیتابیس به پکیج dbal نیاز ندارید

در لاراول تغییر ستون های دیتابیس توسط migration ها، به صورت زیر انجام می شود:

return new class extends Migration
{
    public function up()
    {
        Schema::table('foo', function (Blueprint $table) {
            $table->unsignedBigInteger('bar')->change();
        });
    }
 
    …
}

تا لاراول 9 شما مجبور بودید برای انجام این کار پکیج  doctrine/dbal را در برنامه خود نصب کنید. اما اکنون لاراول بدون نیاز به این پکیج، می تواند تغییرات ستون های دیتابیس را انجام دهد.

تست نویسی برای تعداد کوئری های اجرا شده

یک متد جدید برای بررسی این که چه تعداد کوئری در برنامه اجرا شده، اضافه شده است. به کمک این متد می توانید مطمئن شوید که یک بخش از برنامه شما بیش تر از یک مقدار خاص در دیتابیس کوئری اجرا نمی کند.

public function testItWorksEfficiently()
{
    $this->expectsDatabaseQueryCount(5);
 
    // do stuff...
 
    // throws an exception on tearDown if more than 5 queries have run
    // since the expectation was created.
}

متد های جدید برای کنترل خطای درخواست های HTTP

متد های کاربردی و مختلفی برای کنترل خطا هایی که هنگام ارسال درخواست HTTP پیش می آید اضافه شده است. برخی از این متد ها را در مثال زیر می بینید:

$response->throwIfStatus(500);
 
$response->throwIfStatus(fn ($status) => $status === 500);
 
$response->throwUnlessStatus(200);
 
$response->throwIfClientError();
 
$response->throwIfServerError();

متد های بیشتر را در مستند لاراول می توانید پیدا کنید.

امیدوارم با خواندن این مقاله ویژگی های جدید لاراول 10 را بیشتر شناخته باشید و از آن ها در برنامه های خود استفاده کنید.

💎 شما می توانید در مقاله بعدی، ادامه ویژگی های لاراول 10 را مطالعه کنید.

این محتوا آموزنده بود؟
لاراول 10laravelphpپی اچ پیآپدیتلاراول

sokan-academy-footer-logo
کلیه حقوق مادی و معنوی این وب‌سایت متعلق به سکان آکادمی می باشد.