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
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
Ủng hộ Chung Nguyễn Blog
Chung Nguyễn Blog sử dụng FlashVPS - Dịch vụ quản trị máy chủ chuyên nghiệp để quản lý VPS
#FlashVPS là dịch vụ cloud panel trên nền tảng web hỗ trợ khách hàng:
- * Quản lý máy chủ số lượng nhiều
- * Không có kinh nghiệm quản lý máy chủ
- * Thích sử dụng giao diện web đơn giản, trực quan hơn terminal
- * Quá nhàm chán với việc ghi nhớ và lặp lại việc gõ các câu lệnh
- * Muốn tự động hóa mọi thao tác
- * Muốn tiết kiệm thời gian quản trị máy chủ
- * Muốn tiết kiệm tiền bạc, nhân lực quản trị máy chủ 👉 https://flashvps.dev
Các bài viết trên website thường xuyên được đăng tải và cập nhật trên trang Facebook Chung Nguyễn Blog hãy tặng cho Chung một LIKE nhé! Mãi yêu các bạn!
813 👍
Bình luận
Toán Sư Gia