Laravel 6.0

Ra mắt Laravel 6! Có gì mới?

Ngày 3/9/2019 thì Laravel đã release phiên 6.0 và đây là phiên bản LTS tiếp theo (trước đó là Laravel 5.5). Vậy phiên bản này có gì mới?

Đổ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)

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.0 (LTS) September 3rd, 2019 September 3rd, 2021 September 3rd, 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

//

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

Registration Login
Sign in with social account
or
Lost your Password?
Registration Login
Sign in with social account
or
A password will be send on your post
Registration Login
Registration