ویژگی های جدید لاراول 10 | قسمت سوم

ویژگی های جدید لاراول 10 | قسمت سوم

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

مشخص کردن کلیدهای آرایه در کوئری‌های مربوط به ستون Json

تا کنون می‌توانستیم با استفاده از -> در کلیدهای یک json پیمایش کنیم و کوئری بنویسیم:

DB::table('json_table')->where('json_column->my_property', 'foo')

اکنون می‌توان با اندیس‌های آرایه هم کار کرد:

DB::table('json_table')
    ->where('column->json_option[0]', 'foo')
    ->update(['column->json_option[0]', => 'bar']);

متد whereIn برای روت‌ها

با استفاده از این متد می‌توان آرایه‌ای از مقادیر مجاز برای یک پارامتر در روت را تعیین کرد.

Route::get('/foo/{bar}')->whereIn('bar', $values);

متد Squish برای رشته‌ها

با استفاده از این متد می‌توان تمام فاصله‌های اضافه‌ای که در یک رشته وجود دارد را حذف کرد. برای نمونه خروجی تمام کدهای زیر sokan academy website است:

Str::squish(' sokan academy website ');
Str::squish("sokan\t\tacademy\n\nwebsite");
Str::squish('
        sokan
        academy
        website
    ');

متد findOr در Eloquent

این متد مانند find عمل می‌کند. با این تفاوت که اگر مدل مورد نظر در دیتابیس وجود نداشت، callback ای که در ورودی دوم به آن می‌دهیم را اجرا می‌کند.

User::findOr(1, fn () => abort(403));

این متد روی روابط هم کار می‌کند:

$user->posts()->findOr(1, fn () => '...');

دریافت مقدار ورودی به صورت Stringable

با استفاده از متد های ()str و ()string که به کلاس Request اضافه شده‌اند شما می‌توانید ورودی‌ها را به صورت یک شی از کلاس Stringable دریافت کنید. این شی دقیقا مانند رشته عمل می‌کند و متدهای کاربردی زیادی برای اعمال تغییر در رشته در اختیار ما قرار می‌دهد.

$name = $request->string('name');
// or
$name = $request->str('name');

اجبار به fake کردن درخواست‌های Http در تست ها

با استفاده از کد زیر می‌توانیم fake شدن درخواست‌های Http زده شده در برنامه را اجباری کنیم. در صورتی که حین اجرای تست‌ها یک درخواست Http واقعی بخواهد اجرا شود، یک Exception در برنامه throw خواهد شد.

protected function setUp(): void
{
    parent::setUp();

    Http::preventStrayRequests();

}

متد isJson برای رشته‌ها

با استفاده از این متد می‌توان بررسی کرد که یک رشته، json معتبری هست یا نه.

Str::isJson($data);
//=> boolean

Str::of($data)->isJson()
//=> boolean
 
str($data)->isJson();
//=> boolean

بررسی خالی بودن پوشه

با استفاده از دو متد جدیدی که به filesystem لاراول اضافه شده است می‌توانید خالی بودن یک پوشه را بررسی کنید.

use Illuminate\Support\Facades\File;

if (File::isDirectoryEmpty('john/photos')) {
    return 'You do not have any photos';

}

if (File::isDirectoryNotEmpty('john/videos', true)) {
    return 'You may have one or more videos, even hidden ones.';

}

قرار دادن محدودیت برای زمان اجرای کوئری ها

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

DB::handleExceedingCumulativeQueryDuration(Interval::seconds(5), function (Connection $connection) {
    Log::warning("Database queries exceeded 5 seconds on {$connection->getName()}");

});

تابع ()fake

با استفاده از این تابع helper در برنامه‌های لاراولی، می‌توان به یک شی از کلاس faker دسترسی داشت. کلاس faker برای ایجاد داده‌های تستی در پروژه کاربرد دارد.

fake()->name() 

ظاهر جدید خروجی دستورهای آرتیسان

یکی از تغییرات جالب در نسخه‌های جدید لاراول تغییر و بهبود خروجی دستورهای آرتیسان است. توضیح جزئیات فنی این تغییر در این مقاله نمی‌گنجد. برخی از این تغییرات را در تصویرهای زیر مشاهده می‌کنید:

دستور about

این دستور جدید اطلاعات مفیدی درباره محیط برنامه از جمله نسخه PHP، وضعیت cache ها و... در اختیار شما قرار می‌دهد.

دستور model:show

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

دریافت ورودی کاربر به عنوان یک شی از enum

توسط متد جدید enum که به کلاس Request اضافه شده است می‌توانیم ورودی کاربر را به صورت یک شی از enum مورد نظرمان دریافت کنیم.

// Before
public function post(Request $request)

{
    $status = StatusEnum::tryFrom($request->input('status'));

    // do stuff with status enum...
}

// After
public function post(Request $request)

{
    $status = $request->enum('status', StatusEnum::class);

    // do stuff with status enum...
}

پشتیبانی از الگوریتم‌های مختلف هش در filesystem

به متد hash در filesystem یک ورودی جدید برای مشخص کردن الگوریتم اضافه شده است.

File::hash($path)
// 196b0f14eba66e10fba74dbf9e99c22f => default md5
 
File::hash($path, 'sha256')
// 19c451aedfb24c338a9a2a5c31d553ed77e7cdefc655035f390176ac24066051

قوانین ارزیابی برای تعداد ارقام عدد صحیح

دو قانون ارزیابی جدید min_digits و min_digits برای بررسی تعداد رقم‌های یک عدد صحیح (integer) اضافه شده‌اند.

Validator::validate([
    'number' => 1000,

], [
    'number' => [
        // Passes as `1000` has 4 digits
        'min_digits:3', 'max_digits:5',
        // Fails as `1000` is greater than 5
        'min:3', 'max:5',
    ],

])

با خبر شدن از زمان طولانی پاسخ دادن به یک درخواست

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

use Carbon\CarbonInterval as Interval;
use Illuminate\Contracts\Http\Kernel;

public function boot()

{
    if ($this->app->runningInConsole()) {
        return;
    }

    $kernel = $this->app[Kernel::class];
    $kernel->whenRequestLifecycleIsLongerThan(
        Interval::seconds(1),
        fn ($startedAt, $request, $response) => /* ... */
    );

}

رمزنگاری فایل‌های .env

با دستورهای env:encrypt و env:decrypt که اخیرا به فریم ورک اضافه شده‌اند، شما می‌توانید یک کپی رمزنگاری شده از فایل‌های env. تان داشته باشید و آن را در جایی مانند سیستم کنترل نسخه (git) ذخیره کنید. انجام این کار مزیت‌هایی مانند موارد زیر دارد:

  • به اشتراک گذاشتن تنظیمات محیطی بین توسعه دهنده‌های پروژه
  • بروزرسانی خودکار متغیرهای مربوط به CI
  • رمزگشایی و بارگذاری متغیرهای محیطی هنگام استقرار برنامه
  • از بین رفتن خطر پاک شدن فایل env. به صورت تصادفی در محیط production

دستور های آرتیسان مربوط به دیتابیس

دستورهای db:show، db:table و db:monitor به تازگی به فریم ورک اضافه شده‌اند.

دستور db:show یک مرور کلی از دیتابیس در اختیار ما قرار می‌دهد. خروجی دستور شامل اطلاعاتی مانند نسخه، نام کاربری و... است.

دستور db:table جزئیات یک جدول را نمایش می‌دهد. اطلاعاتی مانند تعداد ردیف‌ها، نام ستون‌ها، ایندکس‌ها و...

دستور db:monitor در حال حاضر تعداد connection های موجود به دیتابیس را نشان می‌دهد.

جست و جو در مستندات لاراول با دستور آرتیسان

دستور بسیار جالب artisan docs امکان دسترسی سریع به مستندات لاراول از طریق command line را فراهم کرده است. با اجرای دستور php artisan docs گزینه‌های مختلفی برای انتخاب در اختیار شما قرار داده می‌شود.

دستور php artisan docs validation بخش مربوط به ارزیابی را در مستندات لاراول باز می‌کند.

دستور php artisan docs validation unique یا php artisan docs va un بخش مربوط به قانون unique در قسمت ارزیابی را باز می‌کند.

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

از بهترین نوشته‌های کاربران سکان آکادمی در سکان پلاس


online-support-icon