×

ویژگی ها و تغییرات لاراول ۶ laravel

لاراول ۶ Laravel

Taylor Otwell سازنده لاراول امروز در کنفرانس laracon خبر از انتشار زود هنگام Laravel 6 داد که البته این خبر با تغییر در ظاهر سایت اصلی و برند لاراول همراه بود و اگر سایت اصلی لاراول را باز کنیم با ظاهر و برندی جدید مواجه میشوید که این عالیه !

لاراول ۶ در جهت بهبود کارکرد لاراول ۵.۸ با معرفی سمنتیک نسخه‌ای سازی شده، سازگاری با Laravel Vapor، بهبود پاسخ ها به مجوز دسترسی، job middleware، lazy collections، بهبود sub-query ها،یکجا کردن ساختار فرانت اند در پکیج کامپوزر laravel/ui، برطرف کردن تعداد زیادی باگ و بهبودهایی در کارایی برنامه ادامه داده است.

 

سمنتیک نسخه‌ای

پکیج فریم ورک لاراول (laravel/framework) حالا از سمنتیک نسخه ای استاندارد پیروی میکند. این ویژگی سازگاری فریم‌ورک را با بقیه ی پکیج های اصلی  لاراول که از این استاندارد نسخه ای سازی پیروی میکنند را تضمین میکند . دوره ی انتشار لاراول بدون تغییر میماند.

سازگاری با Laravel Vapor

Laravel Vapor توسط Taylor Otwell ساخته شده است.

لاراول ۶ با Laravel Vapor که یک پلتفرم خودکار بدون سرور برای لاراول است سازگاری دارد. Vapor پیچیدگی مدیریت برنامه‌های لاراولی روی AWS Lambda را با interface کردن آن ها با استفاده از صف های SQS، پایگاه‌های داده، پوسته‌های Redis، شبکه ها،‌ CloudFront، CDN و چیز های دیگری ساده سازی کرده است.

بهبود پاسخ ها به مجوز دسترسی

بهبود پاسخ ها به مجوز دسترسی توسط Gary Green پیاده سازی شده.

در نسخه های قبلی لاراول، گرفتن و نشان دادن پیام های مربوط به دسترسی به کاربر سخت بود . این مشکل توضیح این که دقیقا چرا یک درخواست مشخص از کاربر رد شده است  را سخت کرده بود . در لاراول ۶ استفاده از پاسخ مجوز های دسترسی و متد Gate:inspectبسیار آسان تر شده . به طور مثال متد زیر را در نظر بگیرید:

/**
 * Determine if the user can view the given flight.
 *
 * @param  \App\User  $user
 * @param  \App\Flight  $flight
 * @return mixed
 */
public function view(User $user, Flight $flight)
{
    return $this->deny('Explanation of denial.');
}

پاسخ مجوز دسترسی با استفاده از متد Gate::inspectبسیار راحت قابل دریافت است :

$response = Gate::inspect('view', $flight);

if ($response->allowed()) {
    // User is authorized to view the flight...
}

if ($response->denied()) {
    echo $response->message();
}

علاوه بر آن، این پیام های ساخته شده توسط ما در زمان استفاده از متد های کمک کننده مثل $this->authorizeیا  Gate::authorize از routes یا controllers به صورت خودکار به frontend برگردانده میشوند.

 

Job Middleware

job middleware توسط Taylor Otwell ساخته شده است.

job middleware  به شما اجازه میدهد که از یک منطق شخصی سازی شده در صف بندی کارها استفاده کنید ، boilerplate داخل job ها را کاهش میدهد. به عنوان مثال، در نسخه‌های قبلی لاراول، شما احتمالا از یک rate-limited callback در متد handle برای یک job استفاده کرده اید:

/**
 * Execute the job.
 *
 * @return void
 */
public function handle()
{
    Redis::throttle('key')->block(0)->allow(1)->every(5)->then(function () {
        info('Lock obtained...');

        // Handle job...
    }, function () {
        // Could not obtain lock...

        return $this->release(5);
    });
}

در لاراول ۶ این کار میتواند در یک middleware خلاصه شود که به شما اجازه میدهد که متد handle داخل job  را از هرگونه مسئولیتی در rate limiting حفظ کنید :

<?php

namespace App\Jobs\Middleware;

use Illuminate\Support\Facades\Redis;

class RateLimited
{
    /**
     * Process the queued job.
     *
     * @param  mixed  $job
     * @param  callable  $next
     * @return mixed
     */
    public function handle($job, $next)
    {
        Redis::throttle('key')
                ->block(0)->allow(1)->every(5)
                ->then(function () use ($job, $next) {
                    // Lock obtained...

                    $next($job);
                }, function () use ($job) {
                    // Could not obtain lock...

                    $job->release(5);
                });
    }
}

بعد از ساختن middleware، باید آن را با بازگرداندن آن از متد middleware یک job  به آن Job  وصل کنیم.

use App\Jobs\Middleware\RateLimited;

/**
 * Get the middleware the job should pass through.
 *
 * @return array
 */
public function middleware()
{
    return [new RateLimited];
}

 

Lazy Collections

Lazy Collections توسط Joseph Silber پیاده سازی شده است.

بسیاری از توسعه دهندگاه لاراول در حال حاضر از استفاده از متد های قدرتمند Collections لذت میبرند . برای تکمیل کلاس Collection لاراول ۶ LazyCollection  را معرفی میکند که به مولد های PHP کمک میکند که امکان کار با داده های بزرگ را زمانی که میزان حافظه کم است به شما بدهند .

به عنوان مثال فرض کنید برنامه ی شما ضمن استفاده از متد های Collection  لاراول برای بررسی Log ها باید یک فایل log چند گیگا بایتی را پردازش کند . به جای خواندن تمام فایل به صورت یکجا، میتوان از lazy collections برای نگه داشتن تنها بخشی از فایل در حافظه در هر زمان استفاده کرد.

$users = App\User::all()->filter(function ($user) {
    return $user->id > 500;
});

هرچند متد cursor در query ساز در لاراول ۶ آپدیت شده تا یک LazyCollection برگرداند ، همچنین این امکان به شما داده میشود که همچنان تنها یک query را اجرا کنید و همینطور در هر زمان تنها یک مدل Eloquent را در حافظه داشته باشید. در این مثال، تا زمانی که تمام کاربر ها را بررسی نکرده ایم اجرای filter به پایان نمیرسد. که حافظه ی اشغال شده را بسیار کم میکند.

$users = App\User::cursor()->filter(function ($user) {
    return $user->id > 500;
});

foreach ($users as $user) {
    echo $user->id;
}

 

بهبود sub-query ها

لاراول ۶ تعداد زیادی متد جدید را برای sub-query های پایگاه داده ارائه کرده است. برای مثال فرض کنید یک جدول برای مقصد پروازها به نام destinations و یک جدول برای پروازهای هر مقصد به نام flights داریم. جدول flights شامل ستون arrived_at است که نشان میدهد که پرواز چه زمانی به مقصد رسیده است. با استفاده از sub-query جدید لاراول ۶ میتوانیم همه مقصد ها و اسم آخرین پروازی که به هر مقصد رسیده را تنها با یک query بدست بیاوریم.

return Destination::addSelect(['last_flight' => Flight::select('name')
    ->whereColumn('destination_id', 'destinations.id')
    ->orderBy('arrived_at', 'desc')
    ->latest()
    ->limit(1)
])->get();

علاوه بر آن، میتوانیم از ویژگی‌های جدید sub-query که به فانکشن orderBy که در query ساز وجود دارد اضافه شده و امکان مرتب سازی همه ی مقاصد را بر اساس زمان آخرین پرواز رسیده به هر مقصد  میدهد استفاده کنیم . این کار هم میتواند تنها با یک query انجام شود:

return Destination::orderByDesc(
    Flight::select('arrived_at')
        ->whereColumn('destination_id', 'destinations.id')
        ->orderBy('arrived_at', 'desc')
        ->latest()
        ->limit(1)
)->get();

 

رابط کاربری لاراول

 ساختار forntend که معمولا از نسخه های قبلی لاراول تهیه شده اند در پکیج laravel/ui کامپوزر قرار داده شده اند. این کار این امکان را میدهد که ساختار رابط کاربری لاراول بتواند جدا از بخش اصلی فریم‌ورک نسخه بندی و منتشر شود. یک نتیجه ی این تغییر این است که هیچ کد bootstrap یا Vue در ساختار پیشفرض فریم‌ورک وجود ندارد و دستور make:auth نیز از فریم‌ورک استخراج شده است.

برای بازگرداندن Vue/Bootstrap رسمی به ساختار فریم‌ورک که در نسخه های قبلی لاراول وجود داشتند، باید پکیج laravel/ui را نصب کنید و دستور Artisan ui را اجرا کنید تا ساختار forntend نصب شود.

composer require laravel/ui

php artisan ui vue --auth

 

نتیجه گیری :

همانطور که در این مطلب خواندیم لاراول ۶ در جهت بهبود کارکرد لاراول ۵٫۸ منتشر شده و تا تاریخ September 3rd, 2021 باگ هاش فیکس شدن و شاهد نسخه ای جدید از لاراول نخواهیم بود البته باز هم قطعی نیست و همه چیز به تیلور و تیمش بستگی داره 😉

#منبع 


مدیر کل

لیسانس حسابداری هستم ولی به دلیل علاقه ام به برنامه نویسی چندین ساله تو این زمینه فعالیت میکنم .


در شبکه های اجتماعی
نظرات کاربران

پاسخی بگذارید

شما میتوانید برای وارد کردن لینک و کدهایHTML از تگ های زیر استفاده کنید : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>