همه چیز درباره لاراول ۷

سلام دوستان. ورژن ۷ فریمورک محبوب لاراول با کلی ویژگی جذاب منتشر شد و امروز سعی می‌کنیم بهترین ویژگی‌های اضافه شده رو با هم بررسی کنیم!

از مهمترین ویژگی‌های اضافه شده به این نسخه می‌تونیم به معرفی شدن Laravel Airlock، افزایش سرعت مسیریابی (Routing)، داشتن cast دلخواه الوکوئنت، روش جدید نوشتن کامپوننت‌های blade، امکانات جالب کلاس Str و … که امروز همه‌ی اونها رو بررسی می‌کنیم.

 

Laravel Airlock

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

 

Castهای دلخواه الوکوئنت

هر چند لاراول کست‌های درونی مختلفی مثل boolean و integer داره، اما بستگی به شرایط شاید لازم باشه یک کست جدید اضافه کنیم یا رفتارهای یک کست موجود رو تغییر بدیم.

برای اینکار کافیه یک کلاس بسازیم که اینترفیس CastsAttributes پیاده‌سازی می‌کنه. با اینکار کلاس ما باید دو تا متد داشته باشه به اسم‌های get و set. متد get برای تبدیل نوع یک مقدار خام که از دیتابیس خونده میشه به کست دلخواه ما استفاده میشه. و متد set برای تبدیل مقدار کست شده به مقدار خام برای ذخیره توی دیتابیس استفاده میشه.

یکی از کست‌های درونی لاراول json هست. با این امکان جدید معرفی شده، می‌تونیم این کست رو خودمون هم بسازیم. برای اینکار یک کلاس توی پوشه‌ی app/Casts می‌سازیم به اسم Json:

<?php
 
namespace App\Casts;
 
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
 
class Json implements CastsAttributes
{
 
    public function get($model, $key, $value, $attributes)
    {
        return json_decode($value, true);
    }
 
    public function set($model, $key, $value, $attributes)
    {
        return json_encode($value);
    }
}

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

<?php
 
namespace App;
 
use App\Casts\Json;
use Illuminate\Database\Eloquent\Model;
 
class User extends Model
{
    protected $casts = [
        'options' => Json::class,
    ];
}

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

 

کامپوننت‌های جدید Blade

توی این ورژن از لاراول یک ویژگی جالب برای Blade ها معرفی شده. این ویژگی شبیه به @component هست، اما ساختار یافته‌تر، تخصصی‌تر با کلی امکانات بیشتر هست. این کامپوننت‌ها با دستور آرتیزان مثل زیر ساخته میشن:

php artisan make:component Alert

دستور بالا یک کامپوننت به اسم Alert رو برای ما میسازه. ابتدا یک کلاس به اسم Alert توی مسیر app/View/Components و یک فایل blade توی مسیر resources/views/components. لاراول بطور خودکار همه‌ی این کامپوننت‌ها رو شناسایی می‌کنه.

کلاسی که ساخته میشه مثل زیر هست:

<?php
 
namespace App\View\Components;
 
use Illuminate\View\Component;
 
 
class Alert extends Component
{
 
    public function __construct()
    {
 
    }
 
    public function render()
    {
        return view('components.alert');
    }
}

و فایل blade کامپوننت که می‌تونیم به صورت زیر بنویسیم:

<div>
    <h3>Alert Component</h3>
</div>

نحوه‌ی استفاده از این کامپوننت بصورت زیر هست. این تگ رو می‌تونیم توی همه‌ی فایل‌های blade استفاده کنیم:

<x-alert />

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

برای دیدن جزییات بیشتر از این ویژگی می‌تونید مستندات رسمی لاراول رو ببینید.

 

HTTP Client

این ویژگی که از guzzle زیر پوست خودش استفاده می‌کنه، برای راحتی کار با درخواست‌های HTTP طراحی شده که ویژگی‌های پراستفاده برای ساختن و کار کردن با یک درخواست HTTP رو ساده‌تر کرده:

use Illuminate\Support\Facades\Http;
 
$response = Http::get('http://test.com');
 
$response->body() : string;
$response->json() : array;
$response->status() : int;
$response->ok() : bool;
$response->successful() : bool;
$response->serverError() : bool;
$response->clientError() : bool;
$response->header($header) : string;
$response->headers() : array;

برای آشنایی بیشتر با این ویژگی می‌تونید مستندات رسمی لاراول رو ببینید.

 

Fluent Strings

اگه قبلا با کلاس Str کار کرده باشین، با متدهای پرکاربرد این کلاس حتما آشنایی دارین. توی لاراول ۷ یک متد به کلاس Str اضافه شده به اسم of که با استفاده کردن از اون یک آبجکت از کلاس Illuminate\Support\Stringable به ما میده. با این کار می‌تونیم به شکل زیر عملیات مورد نظرمون رو بصورت متدهای زنجیره‌ای اجرا کنیم:

return (string) Str::of('  Laravel Framework 6.x ')
                    ->trim()
                    ->replace('6.x', '7.x')
                    ->slug();
 
 
// Laravel-Framework-7.x

برای آشنایی بیشتر با این ویژگی مستندات رسمی لاراول رو ببینید.

 

بهبود Route Model Binding

بعضی وقتا شاید لازم باشه عملیات پیدا کردن یک مدل با یک ستونی غیر از id انجام بشه. توی ورژن‌های قبل اگه چنین مسیری داشتیم:

Route::get('api/posts/{post}', function (App\Post $post) {
    return $post;
});

پارامتر {post} حتما می‌بایست ‌id آیتم مورد نظر ما باشه. اما معرفی ورژن ۷ لاراول می‌تونیم ستون مورد نظرمون رو توی Route تعریف کنیم:

Route::get('api/posts/{post:slug}', function (App\Post $post) {
    return $post;
});

 

افزایش سرعت مسیریابی (Routing)

لاراول ۷ یک راه بهینه‌تر برای تطبیق دادن مسیر‌‌های کش‌شده و کامپایل شده به‌وسیله دستور آرتیزان route:cache معرفی کرده که طبق بررسی‌های انجام‌شده برای یک اپلیکیشن با ۸۰۰ مسیر، سرعت انجام عملیات تطبیق (Route Matching) ۲ برابر بیشتر شده.

 

مدیریت CORS

اگه قبلا برای مدیریت CORS از یک پکیج جدا استفاده می‌کردین، لاراول این ویژگی رو به درون خودش آورده. این کار با استفاده از تنظیمات فایل‌ config/cors.php انجام میشه.

مستندات رسمی لاراول برای این ویژگی

 

تبدیل نوع هنگام اجرای کوئری (Casting)

بعضی وقتا می‌خوایم مقدار ستونی که از دیتابیس داریم می‌خونیم رو برای نمایش، تغییر نوع یا به اصطلاح Casting انجام بدیم. برای مثال کوئری زیر رو درنظر بگیرید:

$users = User::select([
    'users.*',
    'last_posted_at' => Post::selectRaw('MAX(created_at)')
            ->whereColumn('user_id', 'users.id')
])->get();

ستون last_posted_at یک مقدار خام و رشته‌ای هست، درصورتی که می‌خوایم نوعش date باشه. با استفاده از متد withCasts که توی لاراول ۷ معرفی شده، می‌تونیم تغییر نوع رو توی همون کوئری بصورت زیر بنویسیم:

$users = User::select([
    'users.*',
    'last_posted_at' => Post::selectRaw('MAX(created_at)')
            ->whereColumn('user_id', 'users.id')
])->withCasts([
    'last_posted_at' => 'date'
])->get();

 

شخصی‌سازی فایل‌های Stub

وقتی از دستور آرتیزان make برای ساختن کنترلرها، میدلورها، مدل‌ها و … استفاده می‌کنیم، لاراول فایل‌های ما رو با استفاده از قالب‌هایی به اسم stub تولید می‌کنه. تا قبل از معرفی ورژن ۷ این فایل‌ها توی هسته‌ی خود لاراول بودن و ویرایش و شخصی‌سازی اونها تقریبا غیرممکن بود. اما الان با استفاده از دستور آرتیزان stub:publish می‌تونیم این قالب‌ها رو شخصی‌سازی کنیم. با اجرای این دستور فایل‌های stub توی مسیر /stubs کپی میشن که قابل دسترسی و ویرایش خواهند بود.

خب دوستان این مهم‌ترین ویژگی‌هایی بود که توی لاراول ۷ معرفی شده. به نظر میرسه امسال خبرهای خوبی برای این فریمورک و زبان ‌PHP خواهیم داشت! 😃👌

من برای این مقاله از مستندات رسمی لاراول و این منبع استفاده کردم. کاور از laravel-news.com

1+

مدیر کل

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


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

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

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