ویژگی‌های جدید در لاراول 7

17 فروردین 1399
7-3

ورژن جدید لاراول با عنوان لاراول 7 در تاریخ سوم مارس 2020 منتشر شد. براساس استراتژی انتشار ورژن اصلی در هر 6 ماه (فوریه و آگوست)، این نسخه از لاراول آخرین نسخه ی اصلی از لاراول محسوب می شود. اما توجه کنید که این نسخه، یک ورژن LTS یا با پشتیبانی طولانی مدت نیست. در واقع انتشار دهنده های لاراول یک فرصت 6 ماهه را تا سوم سپتامبر 2020 جهت رفع باگ ها و همچنین یک فرصت یک ساله را که از تاریخ سوم مارس 2020 شروع شده است، برای حل مشکلات امنیتی درنظر گرفته اند.

حال بیایید به ویژگی های جدید در لاراول و تغییرات آن نگاهی بیندازیم.

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

  • Laravel Sanctum
  • Zttp for Http client
  • CORS support
  • Custom Elequent Cast
  • Fluent String Operations
  • Blade X
  • Customizable Stubs
  • Query Time Casts
  • Multiple Mail Driver
  • New Artisan Command

اصلاحات در لاراول 7

  • اصلاح Route Model Binding
  • Route دو برابر سریع تر
  • اصلاح Database Queue
  • اصلاح Markdown Mail Template
  • و رفع تعداد قابل توجهی از باگ ها

Laravel Sanctum

Laravel Sanctum یک پکیج رسمی از لاراول جهت احراز هویت API ها است. امکانات پکیج Sanctum موارد زیر را شامل می شود:

  • فراهم کردن توکن ساده براساس احراز هویت API
  • امکان استفاده از پکیج Sanctum، تولید توکن و دسترسی به آن با استفاده از دستور use HasAPITokens در کلاس های مختلف
  • امکان اضافه کردن «توانایی ها» یا "abilities" به توکن ها با در نظر گرفتن آرگومان دوم برای متد ()createToken. (برای آن که بهتر متوجه این امکان شوید، باید بگوییم که این امکان متناظر با scope ها در OAuth می باشد.)
  • امکان احراز هویت برای اپ های موبایل
  • و امکانات دیگر در Sanctum که با مراجعه به مستندات لاراول 7 و یا این لینک می توانید به آن دسترسی داشته باشید.

Zttp برای Http client

در لاراول 7 استفاده از Zttp به جای Http منجر به ایجاد یک راه بهتر و منظم تر برای ایجاد درخواست های Http از API شده است. جهت استفاده از این عملکرد باید Http Facade را در کد خود فراخوانی کنید. نمونه کدها و مثال های زیر را در درخواست Zttp مشاهده می کنید.

درخواست POST

<?php
use Illuminate\Support\Facades\Http;

$response = Http::post($url);

$response = Http::post($url, [
    'site' => 'Laravel Article',
]);

درخواست Get

$response = Http::get($url);
$response = Http::get($url,['foo'=>'bar']);

درخواست به همراه هدر

$response = Http::withHeaders(['foo' => 'bar'])->post($url, [
    'baz' => 'qux',
]);

و دسترسی به پاسخ ها

$response['foo']
$response->body()
$response->json()
$response->status()
$response->ok()

پشتیبانی از CORS

در حال حاضر لاراول 7 از CORS (به معنای اشتراک گذاری منابع با منشأ متقابل) پشتیبانی می کند. اگر یک توسعه دهنده API باشید، احتمالا با مشکلات مربوط به CORS رو به رو شده اید. حالا لاراول 7 به صورت اتوماتیک به درخواست دلخواه شما با توجه به مقدار تنظیم شده پاسخ می دهد. اگر بخواهیم دقیق تر روند پشتیبانی CORS را توضیح دهیم باید بگوییم که لاراول 7 به صورت "out of box" با استفاده از HandleCors middleware پشتیبانی از CORS را مدیریت می کند. توجه کنید که HandleCors middleware به صورت پیش فرض در global middleware قرار گرفته است.

Cast سفارشی در Elequent

همان طور که می دانید در مدل های لاراول پراپرتی یا فیلدی به نام cast داریم. حالا یکی دیگر از ویژگی های مهمی که در لاراول نسخه ی 7 راجع به آن صحبت می کنیم، سفارشی سازی cast هاست. در کد مثال زیر Cast را در کلاس Json سفارشی سازی می کنیم:

<?php

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);
    }
}

حالا از آن چه در کد بالا رخ داد، از elequent cast سفارشی سازی شده خویش در کد زیر استفاده می کنیم، کد زیر یک مدل را در لاراول نشان می دهد:

<?php

namespace App;

use App\Casts\Json;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    
    protected $casts = [
        'extra' => Json::class,
    ];
}

عملیات رشته ای روان

در لاراول 7 شما می توانید بهتر و با قدرت بیشتری به کمک شی گرایی و با بهره گیری از کلاس Illuminate\Support\Str عملیات رشته ای را انجام دهید:

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

// laravel-7x

Blade X

Blade X یکی از دیگر از ویژگی های مهم در لاراول 7 می باشد. با استفاده از Blade X می توانید کامپوننت هایی که اصطلاحا آن ها را class-less می نامیم بسازید. این component ها در قالب، وابستگی کم تری به کلاس های مختلف برای کارهای گوناگون دارند.

مثالی از این عملکرد را در کد زیر که یک x-component ساخته شده است، مشاهده می کنید:

@php($user = $user ?? Auth::user())
@php($size = $size ?? 50)

<img
    class="inline-block rounded-full"
    src="{{ $user->gravatarUrl($size) }}"
    width="{{ $size }}"
    height="{{ $size }}"
/>

و حالا استفاده از Blade X را در کد زیر مشاهده می کنید:

<x-avatar/>
<x-avatar size="40" />
<x-avatar size="100" />

stub

در لاراول 7 می توانید فایل های Stub را با استفاده یکی از دستورات artisan از هسته لاراول خارج و شخصی سازی کنید:

php artisan stub:publish

کست کردن در هنگام اجرای Query ها

یکی دیگر از ویژگی ها در لاراول 7 این است که شما می توانید مقادیر خاصی را هنگام اجرای Query دیتابیس کست کنید. این کار با متد ()withCasts انجام می شود. مثال زیر را مشاهده کنید:

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

امکان استفاده از چند Mail Driver

لاراول 7 این امکان را به شما می دهد تا از چند Mail Driver در یک برنامه استفاده کنید:

Mail::mailer('noreply')
        ->to($request->user())
        ->send(new PostUpdated($post));

دستور جدید در php artisan

یک دستور جدید php artisan در لاراول 7 اضافه شده است. دستور جدید artisan test یک UX زیبا و اطلاعات کاربردی و مفیدی را راجع به تست برایتان فراهم می کنند:

php artisan test
php artisan test

حالا به اصلاحاتی که در ابتدای همین مطلب لیست آن ها آورده ایم می پردازیم (اصلاحات در لاراول 7):

اصلاحات مربوط به Route Model Binding

route model binding به صورت پیش فرض از فیلد id استفاده می کند. در لاراول 7 این امکان برای شما فراهم شده است که به صورت پیش فرض این کلید را خودتان انتخاب کنید. در کد زیر مشاهده کنید:

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

scope اتوماتیک

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

مثلا فرض کنید در یک مدل با شرایط خاصی می خواهید به نتایجی از دیتابیس دسترسی پیدا کنید. با قرار دادن این تکه کد در یک تابع scope از این به بعد آن تابع را که پیشوند scope نیز دارد، فراخوانی می کنید. حالا در لاراول 7 علاوه بر این یک scope اتوماتیک نیز ایجاد شده است. به این صورت که هنگام اجرای یک درخواست از دیتابیس می توانید با توجه به روابط مدل ها از طریق یک مدل به مدل دیگر دسترسی داشته باشید. البته باید همه مدل هایی را که در درخواست ممکن است به یکدیگر ربط پیدا کنند، فراخوانی کنید. کد مثال زیر این موضوع را روشن می کند:

use App\Post;
use App\User;

Route::get('API/users/{user}/posts/{post:slug}', function (User $user, Post $post) {
    return $post;
});

Route های دو برابر سریع تر

اگر از دستور route:cache استفاده کنید در لاراول 7 دو برابر نسبت به لاراول 6 سرعت دسترسی به Route ها بیش تر می شود.

بهبود Database Queue

لاراول 7 بهینه سازی هایی را برای برنامه هایی که Query دیتابیس آن ها بر اساس +Mysql 8  باشد، انجام داده است.

تغییرات قالب markdown ایمیل

در لاراول 7 با markdown، پیش فرض قالب ایمیل با پالت رنگ Tailwind CSS حالتی جدید به خود گرفته است. البته می توانید این قالب را به حالت پابلیش ببرید و به آن صورتی که می خواهید، شخصی سازی کنید.


منبع: سایت Laravel Article

نویسنده شوید

دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.