در این مقاله سعی داریم مختصری از ویژگی های جدید فریم ورک لاراول ورژن 5.7 را بررسی نماییم ، این ورژن در تاریخ چهارم سپتامبر 2018 ، Release شده است .
لاراول 5.7 پیشرفت هایی را نسبت به ورژن 5.6 داشته است ، از جمله قابلیت هایی که به این ورژن اضافه شده اند قابلیت هایی میباشند از قبیل : 

1- LaravelNova
2- Email Verification ، اینترفیس MustVerifyEmail برای مدل User 
3- پیاده سازی ConsoleTesting پیشرفته تر 
4- قابلیت Symfony Dump Server
5-ارسال نوتیفیکیشن به زبان Local

-LaravelNova

Laravel Nova یک داشبورد و پنل زیبا و پیشرفته برای مدیریت برنامه های Laravel است. از ویژگیهای اصلی Nova این است که توانایی مدیریت پایگاه داده با استفاده از Eloquent را دارا میباشد .
از authorization پشتیبانی میکند و همچنین دارای امکاناتی مانند سیستم صف بندی عملیات ، فیلترها و ... میباشد .

- Email Verification

در لاراول 5.7 ، Email Verification برای احراز هویت کاربران و همچنین تاییده حساب کاربری معرفی گردیده است ، در این ویژگی یک ستون به نام email_verified_at از نوع timestamp به مایگریشن User اضافه شده است که نشانگر تاریخ فعال سازی حساب کاربری میباشد . برای استفاده از این قابلیت باید کلاس User اینترفیس MustVerifyEmail  را implements کند . 

<?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
{
    // ...
}
?>​

اگر در مدل User اینترفیس MustVerifyEmail پیاده سازی شده باشد ، کاربر به محض ثبت نام در سیستم ، به صورت اتومات یک ایمیل برای تایید حساب کاربری دریافت میکند که با کلیک کردن بر روی لینک موجود ، حساب کاربری او به صورت اتومات فعال میشود و همچنین در دیتابیس در ستون email_verified_at تاریخ تایید حساب کاربری درج میشود. همچنین یک middleware به نام verified به صورت پیش فرض در Kernel لاراول پیاده سازی شده است تا در routing های User از آن استفاده نماییم و  route های پنل کاربران از middleware پیش فرض verfied استفاده کنند .

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

اگر کاربری که بر روی لینک فعال سازی خود کلیک نکرده باشد ، اجازه دسترسی به پنل کاربری خود را نخواهد داشت .

- پیاده سازی ConsoleTesting پیشرفته تر 

Laravel 5.7 به شما امکان می دهد به راحتی ورودی کاربران را با دستورات کنسول خود، با استفاده از روش expectsQuestion، تست کنید. علاوه بر این، شما می توانید کد خروجی و متنی را که انتظار دارید از طریق دستور console با استفاده از assertExitCode به خروجی مشخص کنید و انتظارات خروجی مشخصی را داشته باشید. 
برای ساخت کنسول کامند ابتدا باید دستور زیر در کنسول وارد شود .فرض کنید میخواهیم ورودی های کاربر را برای انتخاب شهر مورد علاقه شان تست کنیم :

php artisan make:command CityCommandQuestion​

بعد از اجرای این دستور در دایرکتوری app\consoloe\commands یک کلاس پی اچ پی با نام CountryCommandQuestion ساخته میشود . این کلاس یک پراپرتی به نام  $signature دارد که باید آن را مساوی نام CityCommandQuestion​ قرار دهیم .

 protected $signature = 'CityCommandQuestion';

حال با نوشتن کد زیر میتوان در تابع handle کنسول کامند را پیکره بندی کرد .

public function handle()
{
        $name = $this->ask('What is your name?');

        $city = $this->choice('Which city is your favorite?', [
            'Tehran',
            'Isfahan',
            'Shiraz',
            'Toronto',
            'Montreal',
        ]);

        $this->line('Your name is '.$name.' and you favorite city is '.$city.'.');
 }


حال بعد از اجرای دستور php artisan CityCommandQuestion میتوان این کنسول را اجرا کرد. خروجی را میتوانید در زیر مشاهده نمایید .

 What is your name?:
 > Reza

 Which city is your favorite?:
  [0] Tehran
  [1] Isfahan
  [2] Shiraz
  [3] Toronto
  [4] Montreal
 > 2

Your name is Reza and your favorite city is Shiraz.


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

<?php

namespace Tests\Feature;

use Tests\TestCase;

class CityCommandQuestionTest extends TestCase
{
    
    public function testExample()
    {
        $this->artisan('CityCommandQuestion')
            ->expectsQuestion("what is your name?", "Reza")
            ->expectsQuestion(" Which city is your favorite?", "Shiraz")
            ->expectsOutput("Your name is Reza and your favorite city is Shiraz.")
            ->assertExitCode(0);
    }
}
?>

- قابلیت Symfony Dump Server

قابلیت dump-server به شما این اجازه را میدهد تا خروجی های خود را به جای این که در مرورگر ببینید ، در خروجی کنسول کاملا تست و آنالیز کنید و اطلاعاتی که به شما ارائه میکند اطلاعاتی است مانند آی پی و پورت TCP ، نام و دایرکتوری فایل ، middleware های Controller ، تاریخ و متد ارسالی Rquest ها و ... 

برای مثال فرض کنید یک controller داریم به نام ArticleController و میخواهیم متد find را آنالیز نماییم .
use App\Article;
use App\Http\Controllers\Controller;

class LoginController extends Controller
{
   public function find($id){
       // نوشتن این دستور برای آنالیز در کنسول اجباری است .
       dump(Article::find($id));
}

سپس دستور php artisan dump-server را در کنسول تایپ کرده و میتوان با مرورگر به route مقاله ها مانند  localhost:8000/article/find/23  رفت.
خروجی آنالیز به شکل زیر میباشد .

Laravel Var Dump Server
=======================

 [OK] Server listening on tcp://127.0.0.1:9912

GET http://127.0.0.1:8000/article/find/23
-------------------------------

 -------- -----------------------------------------------
  date     Thu, 18 Oct 2018 08:02:56 +0000
  source   LoginController.php on line 39
  file     app\Http\Controllers\ArticleController.php
 -------- -----------------------------------------------
 #attributes: array:6 [
    "id" => 23
    "title" => "title "
    "body" => "body"
    "slug" => 85
    "created_at" => null
    "updated_at" => null
  ]

 

- ارسال نوتیفیکیشن به زبان Local

لاراول 5.7 این امکان را به شما میدهد تا به زبان های دیگر به کاربران خود نوتیفیکشن ارسال کنید ، این تنظیمات را میتوانید در هنگام ارسال نوتیفیکشن انجام دهید ، مانند کد زیر :

$user->notify((new OrderConfirmation($order))->locale('en'));