ورژن جدید لاراول با عنوان لاراول 7 در تاریخ سوم مارس 2020 منتشر شد. براساس استراتژی انتشار ورژن اصلی در هر 6 ماه (فوریه و آگوست)، این نسخه از لاراول آخرین نسخه ی اصلی از لاراول محسوب می شود. اما توجه کنید که این نسخه، یک ورژن LTS یا با پشتیبانی طولانی مدت نیست. در واقع انتشار دهنده های لاراول یک فرصت 6 ماهه را تا سوم سپتامبر 2020 جهت رفع باگ ها و همچنین یک فرصت یک ساله را که از تاریخ سوم مارس 2020 شروع شده است، برای حل مشکلات امنیتی درنظر گرفته اند.
حال بیایید به ویژگی های جدید در لاراول و تغییرات آن نگاهی بیندازیم.
Laravel Sanctum یک پکیج رسمی از لاراول جهت احراز هویت API ها است. امکانات پکیج Sanctum موارد زیر را شامل می شود:
در لاراول 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()
در حال حاضر لاراول 7 از CORS (به معنای اشتراک گذاری منابع با منشأ متقابل) پشتیبانی می کند. اگر یک توسعه دهنده API باشید، احتمالا با مشکلات مربوط به CORS رو به رو شده اید. حالا لاراول 7 به صورت اتوماتیک به درخواست دلخواه شما با توجه به مقدار تنظیم شده پاسخ می دهد. اگر بخواهیم دقیق تر روند پشتیبانی CORS را توضیح دهیم باید بگوییم که لاراول 7 به صورت "out of box" با استفاده از HandleCors middleware پشتیبانی از CORS را مدیریت می کند. توجه کنید که HandleCors middleware به صورت پیش فرض در global middleware قرار گرفته است.
همان طور که می دانید در مدل های لاراول پراپرتی یا فیلدی به نام 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 یکی از دیگر از ویژگی های مهم در لاراول 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" />
در لاراول 7 می توانید فایل های Stub را با استفاده یکی از دستورات artisan از هسته لاراول خارج و شخصی سازی کنید:
php artisan stub:publish
یکی دیگر از ویژگی ها در لاراول 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();
لاراول 7 این امکان را به شما می دهد تا از چند Mail Driver در یک برنامه استفاده کنید:
Mail::mailer('noreply') ->to($request->user()) ->send(new PostUpdated($post));
یک دستور جدید php artisan در لاراول 7 اضافه شده است. دستور جدید artisan test یک UX زیبا و اطلاعات کاربردی و مفیدی را راجع به تست برایتان فراهم می کنند:
php artisan test
php artisan test
حالا به اصلاحاتی که در ابتدای همین مطلب لیست آن ها آورده ایم می پردازیم (اصلاحات در لاراول 7):
route model binding به صورت پیش فرض از فیلد id استفاده می کند. در لاراول 7 این امکان برای شما فراهم شده است که به صورت پیش فرض این کلید را خودتان انتخاب کنید. در کد زیر مشاهده کنید:
Route::get('posts/{post:slug}', function (App\Post $post) { return $post; });
اگر با لاراول کار کرده باشید از خاصیت 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:cache استفاده کنید در لاراول 7 دو برابر نسبت به لاراول 6 سرعت دسترسی به Route ها بیش تر می شود.
لاراول 7 بهینه سازی هایی را برای برنامه هایی که Query دیتابیس آن ها بر اساس +Mysql 8 باشد، انجام داده است.
در لاراول 7 با markdown، پیش فرض قالب ایمیل با پالت رنگ Tailwind CSS حالتی جدید به خود گرفته است. البته می توانید این قالب را به حالت پابلیش ببرید و به آن صورتی که می خواهید، شخصی سازی کنید.
منبع: سایت Laravel Article
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.