Laravel đã release phiên 6.0 vào ngày 03/09/2019 và đây là phiên bản LTS tiếp theo (trước đó là Laravel 5.5). Sau đây là một số điểm mới của bản laravel 6.0.

Đổi versioning scheme sang Semantic Versioning

Vậy Semantic Versioning (semver) có tác dụng gì. Với những developer thường xuyên xử dụng dependency chắc hẳn không còn xa lạ với dependency hell Khi hệ thống của các bạn đang càng ngày càng lớn dần lên các packages càng được xử dụng nhiều thì việc xung đột phiên bản là điều không thể tránh khỏi. Việc bảo trì và phát triển thêm cũng càng trở nên khó khăn hơn rất nhiều. Để giải quyết vấn đề này semver phiên bản 2.0.0 đã đưa ra 11 quy tắc. Các bạn có thể tham khảo tại Semantic Versioning Specification (SemVer)

Tham khảo thêm tại https://viblo.asia/p/semver-and-tags-version-924lJMMmZPM

Chính sách hỗ trợ

Laravel là phiên bản LTS nên sẽ được fix bug trong 2 năm (2021) và fix bảo mật trong 3 năm (2022)

Cải thiện Exceptions thông qua Ignition

Tại laravel EU vừa diễn ra thì dưới sự kết hợp giữa Beyond Code & Spatie đã cho ra mắt Ignition chính thức thay thế cho Whoops với giao diện cực cool cùng với error line chỉ ra trong file blade view thay vì compiled blade view như whoops

Whoops
Ignition

Cải thiện Authorization Responses

Trong các bản phát hành trước đây của Laravel, rất khó để truy xuất và hiển thị các thông báo ủy quyền tùy chỉnh cho người dùng cuối. Điều này gây khó khăn cho việc giải thích cho người dùng cuối chính xác lý do tại sao một yêu cầu cụ thể bị từ chối. Trong Laravel 6.0, điều này giờ đây dễ dàng hơn nhiều khi sử dụng các thông báo phản hồi ủy quyền và phương thức Gate::inspect mới. Ví dụ:

/**
 * Determine if the user can view the given flight.
 *
 * @param  \App\User  $user
 * @param  \App\Flight  $flight
 * @return mixed
 */
public function view(User $user, Flight $flight)
{
    return $this->deny('Explanation of denial.');
}

Job Middleware

Không có gì để giải thích nó giống như Route Middleware, đơn giản là tạo một Job Middleware và inject vào Job

Job Middleware

<?php

namespace App\Jobs\Middleware;

use Illuminate\Support\Facades\Redis;

class RateLimited
{
    /**
     * Process the queued job.
     *
     * @param  mixed  $job
     * @param  callable  $next
     * @return mixed
     */
    public function handle($job, $next)
    {
        Redis::throttle('key')
                ->block(0)->allow(1)->every(5)
                ->then(function () use ($job, $next) {
                    // Lock obtained...

                    $next($job);
                }, function () use ($job) {
                    // Could not obtain lock...

                    $job->release(5);
                });
    }
}

Sau đó trong file Job thêm một phương thức middleware vào và inject middleware vừa tạo ra ở trên

use App\Jobs\Middleware\RateLimited;

/**
 * Get the middleware the job should pass through.
 *
 * @return array
 */
public function middleware()
{
    return [new RateLimited];
}

Lazy Collections

Nó giống như Collection trước đây, sử dụng đòn bẩy là  PHP’s generators cho phép bạn làm việc với một datasets (mảng dữ liệu) lớn trong khi vẫn giữ việc sử dụng memory ở mức thấp.

Trước đây, Chung đã tự custom sử dụng để đọc file logs của Laravel, nhưng có Lazy Collection rồi thì chắc chuyển nhà cho khỏe lại tối ưu hơn.

Ví dụ:

use App\LogEntry;
use Illuminate\Support\LazyCollection;

LazyCollection::make(function () {
    $handle = fopen('log.txt', 'r');

    while (($line = fgets($handle)) !== false) {
        yield $line;
    }
})
->chunk(4)
->map(function ($lines) {
    return LogEntry::fromLines($lines);
})
->each(function (LogEntry $logEntry) {
    // Process the log entry...
});

Cải tiến Eloquent subquery

Một số cải tiến query về select, order by, from của Jonathan Reinink’s, chi tiết tại: Liên kết

Tách Laravel UI ra khỏi framework

Laravel khởi đầu bằng bootstrap, sau này support thêm vue, react scaffolding. Nhưng chỉ sử dụng đúng 1 lần khi tạo project, thường là như vậy. Nên việc giữ nó trong framework là k cần thiết.

Cài laravel ui và sử dụng bằng cách

composer require laravel/ui

php artisan ui vue --auth

Sử dụng phpredis thay cho predis

predis hiện tại không còn được duy trì nữa và đã có những dấu hiệu lỗi đầu tiên xuất hiện với bản phát hành Redis 5 mới. Vậy nên các bạn hãy thay thế sớm đi nhé

composer remove predis/predis

Cài đặt phpredis extension cho PHP (xem hướng dẫn) sau đó thêm hoặc sửa file .env lại

REDIS_CLIENT=phpredis