لاراول 7 منتشر شد: آشنایی با امکانات و تغییرات و ویژگی‌های لاراول ۷

‏  19 دقیقه
۱۷ اسفند ۱۳۹۸

فریم ورک لاراول جز برترین فریم‌ ورک‌های PHP است که در ژوئن سال 2011 توسط Tylor Outwell برای اولین بار منتشر شد. آخرین نسخه منتشر شده از لاراول نسخه 7 آن است که در مورد آن صحبت خواهیم کرد. این فریم‌ ورک بسیار محبوب است و در پروژه‌های بزرگ نیز کاربرد زیادی دارد و از آن بسیار استفاده می‌شود. یکی دیگر از مزایا لاراول این است که می‌توان از آن در پروژه‌های کوچک نیز استفاده کرد.

فهرست محتوای این مقاله

معرفی لاراول 7

بعد از معرفی لاراول 6 و تغییرات عمده‌ای که داشت، حتی لوگو لاراول نیز تغییر کرد، این‌بار لاراول 7 با  هدف بهبود و ارتقا نسخه 6 لاراول منتشر شده است.

نسخه 7 لاراول همراه با انتشارش، ویژگی‌های جدید بسیاری با خود داشته است. همچنین این نسخه تغییرات زیادی داشته است، پس برای بروزرسانی نسخه از 6 به 7 نیاز دارید تغییراتی را اعمال کنید که در ادامه به آنها می‌پردازیم.

نسخه بندی معنایی لاراول

لاراول از نسخه 6 آن که تغییرات عمده‌ای نیز داشت، برای نسخه‌های بعدی خود متدی را تحت عنوان Semantic Versioning یا نسخه بندی معنایی ارائه کرد. در این روش هر شش ماه یکبار یک نسخه از لاراول ارائه می‌شود. این بدین معنی نیست که در هر نسخه تغییرات زیادی خواهیم داشت ولی ممکن است تغییرات کوچک اما کاربردی‌ را در لاراول‌های بعدی ببینیم.

سیاست پشتیبانی

لاراول نسخه 6‌ خود را به عنوان نسخه LTS معرفی کرد و این بدین معنی است که این نسخه‌ها رفع باگ‌ها آنها تا 2 سال و رفع مسائل امنیتی تا 3 سال، پشتیبانی خواهد شد. برای نسخه‌های عمومی این پشتیبانی به صورت، رفع باگ تا 6 ماه و مسائل امنیتی تا 1 سال، انجام می‌شود.

جدول نسخه‌های لاراول

Version

Release

Bug Fixes Until

Security Fixes Until

5.5 (LTS) August 30th, 2017 August 30th, 2019 August 30th, 2020
5.6 February 7th, 2018 August 7th, 2018 February 7th, 2019
5.7 September 4th, 2018 March 4th, 2019 September 4th, 2019
5.8 February 26th, 2019 August 26th, 2019 February 26th, 2020
6 (LTS) September 3rd, 2019 September 3rd, 2021 September 3rd, 2022
7 March 3rd, 2020 September 3rd, 2020 March 3rd, 2021

 

بروز‌رسانی از لاراول 6 به 7

برای بروز‌ رسانی نسخه لاراول از 6 به نسخه 7 نیاز است تا پکیج‌هایی را بروز رسانی و یا وابستگی‌هایی را بررسی کنید که در ادامه توضیح خواهیم داد.

سیمفونی نسخه 5

لاراول نسخه 7 همه پکیج‌های فریم ورک سیمفونی خود را به نسخه 5 ارتقا داده است،  پس نیاز دارید که قبل از بروز رسانی نسخه لاراول به 7 فریم ورک سیمفونی را به نسخه 5 بروز رسانی کنید.

نسخه php پی اچ پی 7.2.5

حداقل نسخه پی اچ پی برای لاراول 7 به نسخه 7.2.5 رسیده است.

بروز‌رسانی وابستگی ها

برای بروز‌رسانی به نسخه 7 لاراول نیاز دارید که پکیج‌ها و وابستگی‌های پروژه خود را بروزرسانی کنید. این موارد را می‌توانید در فایل  composer.json تغییر دهید.

اولین مرحله ارتقا خود لاراول به نسخه 7 است. پکیج laravel/framework را به نسخه 7.0^ بروزرسانی کنید.

پکیج nunomaduro/collision به نسخه  4.1^

پکیج phpunit/phpunit به نسخه 8.5^

پکیج laravel/tinker به نسخه 2.0^

پکیج facade/ignition به نسخه 2.0^

هم‌چنین اگر از پکیج‌های first-party زیر استفاده می‌کنید نیاز است که آن‌ها را به ورژن ذکر شده ارتقا دهید.

ارتقا وابستگی‌های سیمفونی  5

تاثیر تغییرات: بالا

تغییرات کمی نیاز دارید تا خودتان را با بروزرسانی تطبیق دهید.

در مرحله اول نیاز است که متد‌های render و report شما در کلاس App\Exceptions\Handler از Throwable بجای شی‌ای از Exception استفاده کند.

مثال:

use Throwable;
public function report(Throwable $exception);
public function render($request, Throwable $exception);

در مرحله بعد نیاز دارید تنظیمات سشن‌های (Session) پروژه خود را بروز رسانی کنید. در تنظیمات سشن‌ها نیاز دارید که مقدار پشتیبان گزینه secure را null قرار دهید و همچنین برای same_site نیز باید مقدار lax را قرار دهید.

'secure' => env('SESSION_SECURE_COOKIE', null),
'same_site' => 'lax'

احراز هویت

ساختار بندی (Scaffolding)

تاثیر تغییرات: بالا

در نسخه قبلی یعنی 6 لاراول تمامی پکیج‌های احراز هویت به مخزن laravel/ui منتقل شده بود که در حال حاضر نسخه 2 این پکیج منتشر شده است. اگر از چارچوب احراز هویت لاراول استفاده می‌کنید نیاز دارید که این پکیج رو بروز رسانی کنید.

اینترفیس مخزن توکن (The TokenRepositoryInterface)

تاثیر تغییرات: پایین

متد recentlyCreatedToken به اینترفیس Illuminate\Auth\Passwords\TokenRepositoryInterface اضافه شده است. اگر از این اینترفیس استفاده می‌کنید نیاز است که این متد را نیز به کلاس خودتان اضافه کنید.

موتور قالب ساز Blade

متد کامپوننت (The component Method)

تاثیر تغییرات: متوسط

متد Blade::component به Blade::aliasComponent تغییر نام داده است. اگر از این متد استفاده می‌کنید نیاز است که به این نام تغییر دهید.

کامپوننت Blade و Blade X

تاثیر تغییرات: متوسط

لاراول 7 به صورت پیشفرض از component tags برای موتور قالب ساز Blade خود استفاده می‌کند. اگر تمایلی به استفاده از آن ندارید می‌توانید با استفاده از متد withoutComponentTags در قسمت boot فایل AppServiceProvider، این قابلیت را غیرفعال کنید:

use Illuminate\Support\Facades\Blade;

Blade::withoutComponentTags();

مدل‌ها (Eloquent)

متد‌های addHidden / addVisible

تاثیر تغییرات: پایین

دو متد addHidden و addVisible در نسخه جدید حذف شده‌اند. بجای آن‌ها از makeHidden و makeVisible استفاده کنید.

متد‌های booting / booted

تاثیر تغییرات: پایین

متدهای booting و booted به Eloquent‌ها اضافه شده تا کدهای منطق که در پروسه boot انجام می‌گیرد را بتوانیم راحت‌تر تعریف کنیم. اگر متدهایی با این نام در مدل خود دارید نیاز است که نام آنها را تغییر دهید تا با این متدها تضاد نداشته باشند.

سریال سازی تاریخ (Date Serialization)

تاثیر تغییرات: بالا

لاراول 7 از روش جدیدی برای سریال سازی تاریخ استفاده می‌کند. زمانی که از متد toArray یا toJson استفاده می‌کنیم تاریخ به صورت toJson از کلاس Carbon برای ما ترجمه می‌شود که شامل TimeZone و ثانیه به صورت اعشاری می‌باشد.

در حالت قبل تاریخ به این صورت ترجمه می‌شد: 20:01:00 02-12-2019

و در نسخه جدید به صورت: 2019-12-02T20:01:00.283041Z

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

/**
 * Prepare a date for array / JSON serialization.
 *
 * @param  \DateTimeInterface  $date
 * @return string
 */
protected function serializeDate(DateTimeInterface $date){
    return $date->format('Y-m-d H:i:s');
}
نکته :

توجه: این تغییر تفاوتی در ذخیره سازی اطلاعات تاریخ در دیتابیس ایجاد نمی‌کند و صرفا جهت نمایش اطلاعات به صورت Json این تغییر اتفاق افتاده است.

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

سیستم احراز هویت Laravel Airlock

سیستم Airlock یک سیستم سبک برای احراز هویت در اپلیکیشن‌های تک صفحه‌ای (SPA)، اپلیکیشن‌های موبایل و رابط‌های نرم افزاری (API) توکن بیس (Token Base)  می‌باشد. سیستم  Airlock به هر کاربر نرم افزار شما اجازه می‌دهد چندین توکن برای حساب خود ایجاد کند.می‌توانید از هر توکن برای اجازه دادن به بخشی از برنامه‌تان استفاده کنید.

برای اطلاعات بیشتر به مستندات Airlock مراجعه کنید.

Custom Eloquent Casts

لاراول تنوع بسیاری از Cast Type‌ها را در خودش دارد. در نسخه‌ی جدید این امکان به شما داده شده است که می‌توانید کست تایپ خود را به صورت سفارشی با Implement کردن کلاس خود از CastsAttributes تعریف کنید.

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

مثالی از یک کلاس برای کست json به صورت سفارشی:

<?php
namespace App\Casts;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
class Json implements CastsAttributes{
    /**
     * Cast the given value.
     *
     * @param  \Illuminate\Database\Eloquent\Model  $model
     * @param  string  $key
     * @param  mixed  $value
     * @param  array  $attributes
     * @return array
     */
    public function get($model, $key, $value, $attributes)
    {
        return json_decode($value, true);
    }

    /**
     * Prepare the given value for storage.
     *
     * @param  \Illuminate\Database\Eloquent\Model  $model
     * @param  string  $key
     * @param  array  $value
     * @param  array  $attributes
     * @return string
     */
    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{
    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'options' => Json::class,
    ];
}

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

کامپوننت Blade و بهبود آن

یکی از ویژگی‌های چشم‌گیر لاراول 7 ارتقا و بهبود کامپوننت‌ Blade است. شما می‌توانید با استفاده از این ویژگی کامپوننت‌های سفارشی‌ای برای استفاده در فایل‌های View بنویسید و اما حالا ممکن است کامپوننت‌های شما داده هایی را بپذیرند. تمامی ویژگی‌ها و متد‌های عمومی تعریف شده در کلاس به صورت خودکار در فایل ویو کامپوننت در دسترس هستند و شما نیازی به فرستادن اطلاعات به فایل ویو ندارید. می‌توانید Attribute‌های HTML را به راحتی در کلاس خود مدیریت کنید، اینکار با استفاده از متغیر attribute$ در کلاس عملی خواهد بود.

مثالی از کامپوننت App\View\Components\Alert:

<?php

namespace App\View\Components;

use Illuminate\View\Component;

class Alert extends Component
{
    /**
     * The alert type.
     *
     * @var string
     */
    public $type;

    /**
     * Create the component instance.
     *
     * @param  string  $type
     * @return void
     */
    public function __construct($type)
    {
        $this->type = $type;
    }

    /**
     * Get the class for the given alert type.
     *
     * @return string
     */
    public function classForType()
    {
        return $this->type == 'danger' ? 'alert-danger' : 'alert-warning';
    }

    /**
     * Get the view / contents that represent the component.
     *
     * @return \Illuminate\View\View|string
     */
    public function render()
    {
        return view('components.alert');
    }
}

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

<!-- /resources/views/components/alert.blade.php -->

<div class="alert {{ $classForType }}" {{ $attributes }}>
    {{ $heading }}

    {{ $slot }}
</div>

حالا می‌توانید از کد زیر برای استفاده از کامپوننت Alert ساخته شده در بالا استفاده کنید:

<x-alert type="error" class="mb-4">
    <x-slot name="heading">
        Alert content...
    </x-slot>

    Default slot content...
</x-alert>

این مثال ساده از استفاده کامپوننت ویو‌ها است. برای اطلاعات بیشتر می‌توانید به مستندات Blade در سایت لاراول مراجعه کنید.

نکته :

توجه: استفاده @component در ویوها حذف نشده و نخواهد شد.(طبق گفته‌ی سایت لاراول)

HTTP Client

لاراول در این نسخه از نسخه سبک و ساده‌تری از پکیج Guzzle استفاده کرده است. این کار حجم عظیمی از کدها را کاهش می‌دهد و باعث خوانایی کدهایی که مربوط به درخواست‌های HTTP هستند، می‌شود. این نسخه از Guzzle بیشترین تمرکز خود را برای یک تجربه توسعه دهندگی عالی دارد. مثالی از یک درخواست POST:

use Illuminate\Support\Facades\Http;

$response = Http::withHeaders([
    'X-First' => 'foo',
    'X-Second' => 'bar'
])->post('http://test.com/users', [
    'name' => 'Taylor',
]);

return $response['id'];

HTTP Client جدید همچنین توابع جدید و سازگاری را برای انجام تست‌های Http فراهم کرده است:

Http::fake([
    // Stub a JSON response for GitHub endpoints...
    'github.com/*' => Http::response(['foo' => 'bar'], 200, ['Headers']),

    // Stub a string response for Google endpoints...
    'google.com/*' => Http::response('Hello World', 200, ['Headers']),

    // Stub a series of responses for Facebook endpoints...
    'facebook.com/*' => Http::sequence()
                            ->push('Hello World', 200)
                            ->push(['foo' => 'bar'], 200)
                            ->pushStatus(404),
]);

اطلاعات بیشتر در مورد Http Client را می‌توانید از مستندات Http Client مطالعه بفرمایید.

عملیات‌های Fluent String

برای کار کردن با رشته‌ها (String) قبلا با کلاس Illuminate\Support\Str کار می‌کردیم ولی مشکلاتی وجود داشت که اگر می‌خواستید بر روی رشته خود چندین متد را پیاده‌سازی کنید و کارهای مختلفی انجام بدهید ممکن بود حجم کدها بالا برود. در نسخه جدید لاراول ویژگی ای با عنوان Fluent String مطرح شده است.

با استفاده از این کلاس می‌توانید رشته خود را به صورت زنجیر وار مدیریت کنید، در واقع وقتی این کلاس را فراخوانی می‌کنید، رشته ورودی شما را به شکل یک شی ( Object) تبدیل می‌کند و از متد‌های زیادی برای کار با رشته‌ها پشتیبانی می‌کند.

برای ساختن یک شی Illuminate\Support\Stringable از متد Str::of استفاده کنید.

مثالی از Fluent String:

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

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

بهبود Route Model Binding

تغییر چشمگیر دیگری در لاراول 7، Route Model Binding است. حالا بهتر می‌توانید آدرس‌های پروژه خود را مدیریت کنید.

سفارشی سازی کلید اصلی:

گاهی ممکن است بجای استفاده از id در آدرس‌های پروژه‌تان، ستون دیگری از دیتابیس را به عنوان مشخصه (primary key) قرار دهید تا بتوانید مدل‌تان را برگردانید:

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

Automatic Scoping:

زمانی شما نیاز دارید تا در هنگام Binding در Route‌ها مقادیری را نسبت به مدل اول برگردانید که مدل دوم نیز فرزند آن می‌باشد. برای مثال، شما می‌خواهید پستی از وبلاگ‌تان را بر اساس slug و برای کاربری خاص نشان دهید:

use App\Post;
use App\User;

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

در این حالت، لاراول به صورت خودکار نام روابط بین این دو مدل را حدس می‌زند و برای شما پست‌ها را برمی‌گرداند. در مثال بالا، لاراول فرض را بر این می‌گذارد که مدل User رابطه‌ای با نام posts دارد که نشان دهنده‌ی رابطه با مدل Post است و مدل Post را برمی‌گرداند.

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

Multiple Mail Drivers

لاراول حالا اجازه می‌دهد از چندین Mailer Driver برای یک پروژه استفاده کنید و هر درایور می‌تواند تنظیمات جداگانه‌ای داشته باشد. ممکن است بخواهید برای مطمئن شدن از ارسال ایمیل از سرویس‌های ایمیل مختلفی استفاده کنید، که با نسخه جدید لاراول این امکان برای شما فراهم شده است.

می‌توانید از متد mailer برای ارسال ایمیل از تنظیمات mailer دلخواه خود استفاده کنید:

Mail::mailer('postmark')
        ->to($request->user())
        ->send(new OrderShipped($order));

افزایش سرعت Route با استفاده از کش

با استفاده از سیستم کش بهبود یافته لاراول 7، در پروژه‌های بزرگ (بیشتر از 800 Route) روی درخواست ساده‌ای مثل Hello World تا 2 برابر افزایش سرعت مشاهده خواهد شد.

برای این کار نیازی به تغییر در پروژه خود ندارید.

پشتیبانی از CORS

یکی از عمده‌ترین مشکلات کار بین فریم‌ ورک‌های فرانت اند و لاراول، مشکل CORS یا Cross-Origin Resource Sharing است. در نسخه جدید لاراول، پکیج CORS نوشته شده توسط Barry vd. He، بصورت پیشفرض قرار دارد.

برای اطلاع از تنظیمات بیشتر CORS میتوانید به مستندات لاراول مراجعه کنید.

Query Time Casts

زمانی نیاز دارید تا در هنگام اجرای کوئری، مقداری را Cast کنید:

use App\Post;
use App\User;

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

در این حالت مقدار last_posted_at به صورت خام و رشته خواهد بود. حال اگر بخواهیم این مقدار را به مقدار تاریخ تبدیل کنیم، می‌توانیم از متد withCasts استفاده کنیم:

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

بهبود MySQL 8+ Database Queue 

در نسخه‌ی قبلی لاراول استفاده از صف‌ها در دیتابیس برای کاربرد Production، بهینه نبوده است. در لاراول 7 این امر بهبود یافته و پروژه‌هایی که از Mysql نسخه 8 به بالا استفاده می‌کنند، مشکلی نخواهند داشت.

با استفاده از FOR UPDATE SKIP LOCKED ، درایور دیتابیس مطمئن‌تر و سازگار‌تر با کاربرد Production پروژه خواهد بود.

دستور Artisan test

دستور phpunit برای انجام تست‌ها در لاراول وجود داشته است. حالا دستور دیگری به نام test برای انجام تست‌ها اضافه شده است. این دستور تنها رابط کاربری جالب‌تر و زیباتری را در کنسول فراهم کرده است.

Larval 7 Released: Getting to know Larval 7's features and changes

آرگومان‌هایی که برای phpunit استفاده می‌شد، حالا نیز در test کاربرد دارد:

php artisan test --group=feature

بهبود قالب Markdown Mail 

قالب Markdown ایمیل نیز از نظر رابط کاربری تغییراتی داشته است. استفاده از پالت رنگی Tailwind CSS، قالب را مدرن‌تر کرده است. البته می‌توانید این قالب را نیز حتی بازنویسی کنید.

Larval 7 Released: Getting to know Larval 7's features and changes

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

Stub Customization

با استفاده از دستور make می‌توان کلاس‌های مختلفی در لاراول از جمله مدل‌ها، مایگریشن‌ها، کنترلر‌ها را ساخت. شما می‌توانید با استفاده از دستور stub، کلاس‌های بالا را به همراه ورودی‌های دلخواه خود بسازید.

فایل‌ها در پوشه‌‌ی stubs در مسیر اصلی پروژه ذخیره می‌شوند. تغییر کوچکی نیز در فایل‌ها، هنگام اجرای دستور make اعمال می‌شود.

تنظیمات Queue maxExceptions 

در لاراول 7 می‌توانید برای Job‌های تعریف شده خودتان یک متغیر به نام maxExceptions بسازید و مقدار حداکثر استثنا را مشخص کنید تا در صورت دریافت خطا بیش از اندازه، آن Job مورد نظر لغو گردد.

مثال:

<?php

namespace App\Jobs;

class ProcessPodcast implements ShouldQueue
{
    /**
     * The number of times the job may be attempted.
     *
     * @var int
     */
    public $tries = 25;

    /**
     * The maximum number of exceptions to allow before failing.
     *
     * @var int
     */
    public $maxExceptions = 3;

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Redis::throttle('key')->allow(10)->every(60)->then(function () {
            // Lock obtained, process the podcast...
        }, function () {
            // Unable to obtain lock...
            return $this->release(10);
        });
    }
}

در این مثال، Job مورد نظر، هر 10 ثانیه تلاش می‌کند تا با Redis ارتباط برقرار کند و برای 25 بار تلاش خود را ادامه می‌دهد. اگر چه با گرفتن 3 خطای غیرقابل مدیریت این job با شکست مواجه خواهد شد.

انتشار نسخه 7.14 لاراول

دو موضوع مهمی که در انتشار نسخه 7.14 لاراول رخ داده است، اضافه شدن ایجاد ویژگی‌های View Component در هنگام استفاده از متد render و حدس زدن نوع فایل با استفاده از mime-type است.

ویژگی‌های View Component‌ها در متد render

تایلر اوت‌ول (Tylor Outwell) به تازگی در نسخه جدید لاراول امکانی فراهم کرده است که با استفاده از آن می‌توانید یک Closure از ویژگی‌های هر View Component را برگردانید.

public function render()
{
    return function ($data) {
        // $data['attributes'];
        // $this->attributes;
    }
}

حدس زدن نوع فایل بر اساس mime-type

یک متد جدید به کلاس File اضافه شده است که شما بر اساس mime-type فایل می‌توانید نوع فایل و حتی پسوند آن را پیدا کنید.

>>> File::name(public_path('image.png'))
=> "image"
>>> File::extension(public_path('image.png'))
=> "png"
>>> File::guessedExtension(public_path('image.png'))
=> "png"
>>> File::copy(public_path('image.png'), public_path('image'))
=> true
>>> File::name(public_path('image'))
=> "image"
>>> File::extension(public_path('image'))
=> ""
>>> File::guessedExtension(public_path('image'))
=> "png"

متد toPsrRequest

متد جدید toPsrRequest در Http Client به شما اجازه‌ی دوباره سازی ویژگی TransferStat‌ها را در زمان استفاده از http fake می‌دهد.

Http::fake([
    'https://external_api.com/403' => function (Request $request) {
        $http_response = Http::response("", 403);
        $http_response->TransferStats = new TransferStats($request->toPsrRequest());
        return $http_response;
    }
]);

اضافه شدن متد addIf در استفاده از MessageBag

یک متد برای ایجاد شرط در Message Bag اضافه شده است که شما می‌توانید همچنین شرط‌های خود را در زمان استفاده از Message Bag‌ها ایجاد کنید.

$messageBag->addIf(
    someCondition(),
    'name',
    'Example message.'
);

جمع بندی:

نسخه‌ی 7 لاراول تغییرات اندک ولی کاربردی بسیاری داشته است و مسیر پیشرفت خود را ادامه داده است. بعد از به اصطلاح به بلوغ رسیدن لاراول در نسخه 6 آن، این نسخه یعنی نسخه 7 بهبود بسیاری حاصل کرده است و هم توسعه‌دهندگان را راحت‌تر و هم کارایی را بیشتر کرده است. با استفاده از Route Caching، سرعت را بیشتر و با ارتقا و بهبود ویژگی‌هایی مثل Http Client راحتی بیشتری برای برنامه‌ نویسان ارائه کرده است تا بار دیگر قدرت خود را به رخ بکشد و از میدان رقابت عقب نماند.

اگر به یادگیری بیشتر لاراول علاقه داری می‌تونی در دوره آموزشی لاراول کاربردی (بسته پروژه محور) شرکت کنی، این دوره شامل ۱۲ پروژه کاربردی و پر استفاده در دنیای واقعی است، که تمامی پروژه‌ها به صورت کامل برنامه‌ نویسی خواهند شد، تا دانشجو بتواند با روند ایجاد و تکمیل پروژه به صورت کامل آشنا شود.

چه امتیازی به این مقاله می دید؟
نویسنده وحید حسنی
از دوست داران دنیای تکنولوژی مخصوصا دنیای وب از توسعه دهندگان وب مخصوصا بک اند از عاشقان پی اچ پی مخصوصا لاراول از دیوانگان کار کردن مخصوصا در آی ویرا ;-)
ارسال دیدگاه
خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :

 

نظرات کاربران

حسین سلطانیان

بسیار عالی

وحید حسنی

خیلی ممنون 🙏