آشنایی با 10 ویژگی جدید در نسخه ی 5.7 لاراول

11 شهریور 1398
laravel5.7-what's-new

سلام به شما همراهان گرامی روکسو. همانطور که می دانید لاراول یکی از محبوب ترین فریم ورک های حال حاضر دنیا برای زبان PHP است و به شما قابلیت های کم نظیری ارائه می دهد. نسخه 5.7 لاراول در اواخر (سپتامبر) سال 2018 ارائه شد و با قابلیت های جدیدی پا به میدان رقابت با دیگر فریم ورک های PHP گذاشته است. قصد دارم در این مقاله شما را به 10 ویژگی جدید لاراول 5.7 آشنا کنم. این ویژگی های جدید عبارت اند از:

پیاده سازی Dump Server فریم ورک symphony

لاراول نسخه 5.7 با قابلیتی (پکیجی) به نام laravel-dump-server ارائه می شود که شما می توانید از آن در Artisan command استفاده کنید. این قابلیت دقیقا همان قابلیت Dump Server در  فریم ورک symphony می باشد. این پکیج به شما یک dump server می دهد که تمام خروجی های حاصل از فراخوانی dump را جمع آوری می کند.

استفاده در Artisan Command:

php artisan dump-server

زمانی که سرور شروع به کار کند، پس از فراخوانی dump، میتوانید آن را در کنسول مشاهده کنید:

ویژگی dump server در نسخه ی جدید لاراول
ویژگی dump server در نسخه جدید لاراول

پشتیبانی بهتر از فایل های سیستمی

Laravel 5.7 دو متد جدید برای خواندن و نوشتن stream ها در فایل های سیستم دارد. یکی از آن ها readStream و دیگری writeStream است که به ترتیب برای خواندن و نوشتن استفاده می شوند. مثال:

Storage::disk('s3')->writeStream(
    'new-package.zip',
    Storage::disk('local')->readStream('local-package.zip')
);

بهبود قسمت testing در Artisan Command

در نسخه 5.7 لاراول روش بهتری برای تست کردن دستورات Artisan موجود است. به مثال زیر توجه کنید. این مثال یک دستور Artisan است:

Artisan::command('hackathon-starter:init', function () {
    $project = $this->ask('What type of project do you want to build?');

    $this->line('Initializing...');

    $answer = $this->choice('Which language do you program in?', [
        'pwa-on-steroids',
        'pwa-normal',
        'pwa-on-fire',
    ]);

    $this->line('Installing...');
});

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

/**
 * Test a console command.
 *
 * @return void
 */
public function test_console_command()
{
    $this->artisan('hackathon-starter:init')
         ->expectsQuestion('What type of project do you want to build?', 'PWA')
         ->expectsOutput('Initializing..')
         ->expectsQuestion('Please specify the type of PWA', 'pwa-on-fire')
         ->expectsOutput('Installing...')
         ->assertExitCode(0);
}

پشتیبانی چند زبانه از notification ها

در نسخه Laravel 5.7 می توانید به غیر از زبان فعلی سیستم به زبان های دیگری نیز notification ارسال کنید. در واقع کلاس notification زیر:

Illuminate\Notifications\Notification

یک متد locale در خود دارد که میتواند زبان مورد نظرتان را تنظیم کند:

  $user->notify((new EmailSent($email))->locale('zh'));
  Notification::locale('zh')->send($users, new EmailSent($email));

شخصی سازی Paginator

در حالت پیش فرض لاراول 3 لینک مختلف را در اطراف لینک های اصلی paginator قرار می دهد اما در Laravel 5.7 گزینه ی جدیدی به نام onEachSide اضافه شده است تا بتوانید تعداد لینک های نمایش داده شده در هر دو طرف را تعیین کنید:

{{ $paginator->onEachSide(7)->links() }}

گزینه های بیشتر برای Guest Policy

در حالت پیش فرض قسمت احراز هویت لاراول (authorization gate) برای کاربران مهمان (guest) مقدار false را برمی گرداند اما در بروز رسانی جدید می توانید به این افراد (افرادی که احراز هویت یا authenticate نشده اند) اجازه ی عبور دهید. برای این کار باید یک type-hint غیر الزامی و اختیاری یا مقدار پیش فرض null را برای آرگومان کاربر قرار دهید:

Gate::define('modify-sheet', function (?User $user, Sheet $sheet) {
    // ...
});

اعتبارسنجی اختیاری ایمیل ها

Laravel 5.7 یک گزینه ی دیگر برای اعتبارسنجی ایمیل ها دارد؛ باید یک ستون timestamp به نام email_verified_at در جدول کاربران ایجاد کنید تا این ویژگی به طور صحیح کار کند. اگر می خواهید کاربران جدیدتان حتما ایمیل هایشان را تایید و اعتبار سنجی کنند، مدل User باید از MustVerfifyEmail استفاده کند:

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements MustVerifyEmail
{
    // ...
}

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

این قابلیت جدید یک middleware نیز به نام verified دارد. کاربرد verified برای موقعیت هایی است که شما می خواهید از برخی از قسمت های برنامه محافظت کنید تا فقط کاربران اعتبارسنجی شده (verified) به آن قسمت ها دسترسی داشته باشند:

  'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,

پشتیبانی بهتر از خطاها هنگام توسعه

آقای Joseph Silber یک PR جدید ثبت کرده است که به لاراول اجازه می دهد اگر متدی روی مدلی فراخوانی شد اما اصلا چنین متدی وجود نداشت، یک پیام خطای دقیق و مشخص برای ما نمایش داده شود. قبل از این موضوع اگر نام متدی را اشتباه تایپ می کردید، در قسمت query builder پیام های عجیب و غریبی می گرفتید.

توییت آقای Joseph Silber:

Ever mistyped a method on an Eloquent model and got a cryptic error saying that the method doesn't exist *on the query builder* 😳

Well, in @laravelphp 5.7 you'll now get a clear, concise message saying that the method doesn't exist on the model 👌https://t.co/uKAxbIVdmvpic.twitter.com/aWgQ8zr2ak

— Joseph Silber (@joseph_silber) August 12, 2018

تولید URL و syntax قابل فراخوانی

Laravel 5.7 به شما اجازه می دهد که برای عملیات های کنترلرهایی که مسئول تولید URL هستند از آرایه استفاده کرده و سپس آن را فراخوانی کنید. بله یعنی می توانید آرایه را صدا بزنید.

قبل از لاراول 5.7 باید بدین صورت عمل می کردیم:

$url = action('FoodController@index');

$url = action('FoodController@view', ['id' => 1]);

اما حالا می توانیم بگوییم:

$url = action([FoodController::class, 'index']);

$url = action([FoodController::class, 'view'], ['id' => 1]);

معرفی Laravel Nova

بله! بالاخره پروژه ای که همه انتظارش را می کشیدند ارائه شد:  Laravel Nova

پنل مدیریتی Laravel Nova
پنل مدیریتی Laravel Nova

برای آن دسته از کاربرانی که نمی دانند Laravel Nova چیست باید بگویم Laravel Nova یک پنل مدیریتی بسیار زیبا برای لاراول است که از ترکیب Vue.js و لاراول ساخته شده است (یک SPA است). این پنل مدیریتی از تمام قابلیت های زیر پشتیبانی می کند:

  • Filters
  • Lenses
  • Actions
  • queued actions
  • metrics
  • authorization
  • custom tools
  • custom cards
  • custom fields
  • و...

دوست دارید به نسخه 5.7 مهاجرت کنید؟

برای استفاده از Laravel 5.7 باید از PHP نسخه 7.1.3 استفاده کنید و کل فرآیند بروزرسانی احتمالا حدود 15 دقیقه یا بیشتر زمان خواهد برد. برای اطلاع از نحوه ی بروزرسانی لاراول به نسخه 5.7 به آموزش کامل و مفصل موجود در سایت لاراول مراجعه کنید. همچنین اگر دوست ندارید که بروزرسانی به صورت دستی باشد و فایل ها و پیکربندی ها را خودتان تنظیم کنید می توانید از Laravel Shift استفاده کنید؛ Laravel Shift یک سرویس بروزرسانی خودکار است که می تواند فرآیند بروزرسانی را به صورت خودکار انجام دهد.

نویسنده شوید
دیدگاه‌های شما

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