- vừa được xem lúc

Laravel 10 có gì mới?

0 0 25

Người đăng: Dao Vinh Sơn

Theo Viblo Asia

Giới thiệu

Sau hơn một thập kỷ kể từ khi giới thiệu vào tháng Sáu năm 2011, Framework Laravel đã trở nên cực kỳ phổ biến. Các phiên bản của Laravel được release hằng năm với những nâng cấp đáng kể.

Mới đây, vào ngày 14 tháng 2 năm 2023, phiên bản Laravel 10 chính thức được phát hành. Chúng ta hãy cùng nhau tìm hiểu xem phiên bản này có những thay đổi và cập nhật gì so với những phiên bản trước nhé.

Kế hoạch release của Laravel

Hiện nay, các phiên bản Laravel được dự kiến release vào Q1 hàng năm.

Đối với tất cả các phiên bản Laravel, các bản fix bug được cung cấp trong 18 tháng và các bản sửa lỗi bảo mật được cung cấp trong 2 năm.

Laravel 10 hỗ trợ PHP phiên bản 8.1-8.2 và không hỗ trợ 8.0.

Những cập nhật trong Laravel 10

1. Native Type Declarations

Trước version 10: sử dụng DocBlocks để làm rõ chức năng của một function và loại parameters hoặc response mong đợi.

 /** * Determine whether the user can create models. * * @param User $user * @return IlluminateAuthAccessResponse|bool */ public function create(User $user) { // }

Version 10:

 /** * Store a newly created resource in storage. */ public function store(Request $request): View { return view(''); }

Để đảm bảo được sự tương thích ngược của framework (breaking changes), các thuộc tính sẽ được áp dụng cho:

  • Dữ liệu trả về (return types)
  • Tham số của phương thức (method arguments)
  • Loại bỏ một số khai báo types không còn cần thiết ở docblock
  • Cho phép có thể khai báo ngay trong các tham số của closure

2. Invokable Validation rules sẽ là mặc định

Trước version 10: Nếu bạn muốn tạo Rule Invokable trong Laravel 9 phải thêm cờ –-invokable khi khai báo.

Version 10: Khi tạo Rule sẽ mặc định là Invokable

# Laravel 9 creates a rule class that implements the
# Illuminate\Contracts\Validation\Rule interface
php artisan make:rule Uppercase # Laravel 9 flag to create an invokable
php artisan make:rule Uppercase --invokable # Laravel 10 creates an invokable rule by default
php artisan make:rule Uppercase

3. Hỗ trợ sửa cột cho CSDL

Nhằm loại bỏ dần nhu cầu sử dụng package doctrine/dbal, một tính năng mới đã được giới thiệu trong Laravel 10 cho phép các nhà phát triển sử dụng phương thức change() để sửa đổi các cột mà không cần các gói bổ sung.

Sử dụng phương thức change() để chỉnh sửa cột.

Ví dụ: Để sửa kiểu dữ liệu từ integer -> bigInt ta làm như sau

# before
$table->integer('user_balance')->unsigned()->default(0)->comment('balance'); # after
$table->bigInteger('user_balance')->unsigned()->default(0)->comment('balance')->change();

Note:

  • Cần thêm tất cả thuộc tính của cột khi thay đổi nếu không chúng sẽ bị loại bỏ.
  • Nếu đã cài đặt doctrine/dbal, nên khai báo phương thức Schema::useNativeSchemaOperationsIfPossible() trong App/Providers/AppServiceProvider để sử dụng tính năng này. Laravel sẽ ưu tiên nó trước khi sử dụng đến package và không hỗ trợ cho SQLite.
use IlluminateSupportFacadesSchema;
class AppServiceProvider extends ServiceProvider
{ public function boot() { Schema::useNativeSchemaOperationsIfPossible(); }
}

4. Hỗ trợ lấy ra Column Type

Tương tự change(), laravel 10 hỗ trợ phương thức Schema::getColumnType mà không cần đến doctrine/dbal.

 Schema::getColumnType('questions', 'contents');

5. Hỗ trợ phương thức whereExists() cho Eloquent ORM

Ở những phiên bản trước, việc sử dụng whereExists() cần sử dụng query lồng nhau.

# previous version
Question::whereExists(function ($query) { $query->from('answers')->whereColumn('asnwers.question_id', 'questions.id');
});

Ở phiên bản 10, ta chỉ cần làm như sau:

# version 10
Question::whereExists( Answer::whereColumn('answers.question_id', 'questions.id')
);

6. Cập nhật SQL Server để sử dụng FETCH và OFFSET cho các query không bao gồm orderBy

Khi chúng ta viết 1 query như sau:

$builder->select('*')->from('questions')->skip(11)->take(10)->orderBy('published_at', 'desc');

Laravel sẽ tạo câu lệnh SQL sử dụng FETCH và OFFSET:

select * from [questions] order by [published_at] desc offset 11 rows fetch next 10 rows only

Tuy nhiên, ở phiên bản trước, nếu loại bỏ orderBy khỏi truy vấn, nó sẽ quay trở lại phương thức bù trừ(offsetting) kết quả cũ:

select * from (select *, row_number() over (order by (select 0)) as row_num from [questions]) as temp_table where row_num between 11 and 20 order by row_num

Nhưng Laravel 10 sẽ sử dụng FETCHOFFSET ngay cả khi không có orderBy:

select * from [questions] order by (SELECT 0) offset 10 rows fetch next 10 rows only

-> Cải thiện tốc độ truy vấn lên tới 33% và yêu cầu ít bước thực hiện hơn

7. Process Interaction

Process Interaction giúp việc thử nghiệm và chạy các quy trình CLI trở nên dễ dàng.

use IlluminateSupportFacadesProcess;
$result = Process::run('ls -la');
$result->successful();
$result->failed();
$result->exitCode();
$result->output();
$result->errorOutput();
$result->throw();
$result->throwIf(condition);

Process Interaction giúp chúng ta:

  • Xử lý đầu ra của process khi nhận được
  • Thiết lập Process không đồng bộ
  • Tạo ra nhóm các process
  • Các tính năng testing phong phú thông qua fake()
  • Ngăn chặn ngoại lệ trong quá trình testing

Process là một tính năng mới rất được đầu tư với nhiều phương thức và option được cung cấp. Bạn có thể tìm hiểu chi tiết ở docs về phần này của Laravel

8. Cung cấp 1 package mới - Laravel Pennant

Laravel Pennant cung cấp một cách tiếp cận gọn nhẹ, được sắp xếp hợp lý để quản lý các cờ tính năng của ứng dụng của bạn.

Nó cho phép chúng ra tự tin triển khai dần dần các tính năng ứng dụng mới, thử nghiệm các thiết kế giao diện mới.

Bạn có thể tìm hiểu chi tiết nó trong docs của Laravel 10.

9. Một số update nhỏ khác

  • Cung cấp Helper String::password() giúp tạo mật khẩu ngẫu nhiên, an toàn có độ dài nhất định. Mật khẩu theo mặc định sẽ gồm 32 ký tự với sự kết hợp của các chữ cái, số, ký hiệu và khoảng trắng. Chúng ta có thể custom lại với một số options:
// default 
$password = Str::password(); // optional
$password = Str::password(12);
  • Thuật toán mã hóa nhanh hơn: xxHash là một thuật toán Hash cực kỳ nhanh. Nó có tính ngẫu nhiên và phân tán đầu ra tuyệt vời, cũng như tính duy nhất để giảm va chạm. Vì PHP 8.1 cung cấp hỗ trợ cho xxh128 và vì Laravel 10 chạy trên PHP 8.1 nên việc có một thuật toán băm đáng tin cậy như vậy trong Laravel 10 là lý tưởng.
  • Cải thiện hiệu năng của Eager Loading.
  • PHPUnit 10 Support

Một số thứ bị loại bỏ

  • Loại bỏ phương thức handleDeprecation
  • Loại bỏ phương thức assertTimesSent
  • Loại bỏ thuộc tính ScheduleListCommand's $defaultName
  • Loại bỏ phương thức Route::home
  • Loại bỏ phương thức dispatchNow
  • Loại bỏ phương thức getBaseQuery, có phương thức toBase tương tự
  • Class MaintenanceModeException
  • Trait MocksApplicationServices
  • Loại bỏ phương thức mail fake’s Mail::failures
  • Thuộc tính $dates(dùng $casts)
  • Loại bỏ phương thức assertTimesSent()

Tổng kết

Vừa rồi, chúng ta đã tìm hiể về một số thay đổi và cập nhật trong phiên bản Laravel 10.

Ngoài những thay đổi ở trên, vẫn còn một số thay đổi nhỏ nữa mà mình chưa đề cập tới hoặc chưa tìm hiểu ra. Các bạn hãy bổ sung cho mình ở phần comment nhé.

Cảm ơn mọi người đã đọc bài viết của mình. Hẹn gặp lại mọi người ! 🤗🤗🤗

Tại liệu tham khảo: https://laravel.com/

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 396

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 449

- vừa được xem lúc

Sử dụng Swagger để xây dựng API documentation

Giới thiệu về Swagger. RESTful API là một tiêu chuẩn dùng trong việc thiết kế API cho các ứng dụng web (thiết kế Web services) để tiện cho việc quản lý các resource.

0 0 1k

- vừa được xem lúc

So sánh Interface và Abstract trong lập trình hướng đối tượng.

Tổng quan. Interface và Abstract class là 2 khái niệm cơ bản trong lập trình OOP.

0 0 63

- vừa được xem lúc

CURL và cách sử dụng trong PHP

Giới Thiệu. CURL là bộ thư viện được sử dụng để giúp thực hiện việc chuyển dữ liệu thông qua nhiều giao thức khác nhau (như HTTP, FPT...). Với giao thức HTTP, cURL hỗ trợ việc gửi dữ liệu sử dụng tất cả các phương thức hiện có như GET, POST, PUT, DELETE... cURL cũng hỗ trợ việc chuyền dữ liệu sử dụn

0 0 93

- vừa được xem lúc

Thêm dòng dữ liệu mới (MySQL) trong Laravel

Chào các bạn, Laravel hiện đang là hot trend trong "thế giới PHP". 1. Cấu hình cơ bản ban đầu. .

0 0 51