Laravel đã thống trị bối cảnh khung web PHP trong nhiều năm nay. Nếu bạn xây dựng các trang web PHP tùy chỉnh, rất có thể bạn đã sử dụng khung này một hoặc hai lần và biết rằng bản cập nhật Laravel sẽ xuất hiện sáu tháng một lần
Laravel v9 được phát hành vào ngày 8 tháng 2 năm 2022 và nó cung cấp nhiều tính năng mới
Lịch sử phát hành của Laravel
Mặc dù các bản phát hành trước đây của Laravel diễn ra sáu tháng một lần, nhưng chu kỳ phát hành mới trong tương lai sẽ là 12 tháng một lần, điều này đảm bảo bản phát hành đồng bộ với Symfony — mà Laravel sử dụng ở hậu trường — và cho phép nhóm phát triển có thêm thời gian để sửa bất kỳ lỗi nào xảy ra
Dưới đây là bảng phân tích về các bản phát hành Laravel gần đây nhất và sắp tới
Phiên bản Phiên bản PHPReleaseSửa lỗi cho đến khi Bảo mật được sửa Cho đến khi6 (LTS)7. 2 – 8. 0Ngày 3 tháng 9 năm 2019Ngày 25 tháng 1 năm 2022Ngày 6 tháng 9 năm 202277. 2 – 8. Ngày 3 tháng 3 năm 2020 Ngày 6 tháng 10 năm 2020 Ngày 3 tháng 3 năm 202187. 3 – 8. 1 Ngày 8 tháng 9 năm 2020 Ngày 26 tháng 7 năm 2022 Ngày 24 tháng 1 năm 20239 (LTS)8. 0 – 8. 1 ngày 8 tháng 2 năm 2022 ngày 8 tháng 2 năm 2024 ngày 8 tháng 2 năm 2025108. 0 – 8. 1 Ngày 7 tháng 2 năm 2023 Ngày 7 tháng 8 năm 2024 Ngày 7 tháng 2 năm 2025Bạn có thể thấy phiên bản 9 là phiên bản mới hỗ trợ dài hạn, thay thế cho phiên bản 6 sẽ không còn được hỗ trợ vào cuối năm nay. Kể từ tháng này, v7 hoàn toàn không còn được hỗ trợ, vì vậy nếu bạn đang sử dụng Laravel 6 hoặc 7, đã đến lúc nâng cấp lên v9
Có gì mới trong Laravel 9?
Trong bài viết này, chúng tôi sẽ đề cập đến những thay đổi lớn hiện tại trong Laravel 9, nhưng hy vọng sẽ sớm thấy nhiều tính năng và thay đổi hơn
PHP 8 là yêu cầu tối thiểu
Laravel sử dụng Symfony 6, yêu cầu ít nhất PHP 8. PHP 8 đi kèm với trình biên dịch just-in-time (JIT) mới, tiện ích mở rộng OPcache, các đối số được đặt tên, v.v.
Symfony Mailer đã thay thế Swift Mailer
Swift Mailer, đã được sử dụng trong Laravel trong nhiều năm, đang bị xóa và sẽ không còn được duy trì. Trong Laravel v9 và các bản phát hành trong tương lai, bạn sẽ phải sử dụng Symfony Mailer. Nếu bạn đang nâng cấp một phiên bản Laravel hiện có, hãy xem hướng dẫn nâng cấp
Nhóm tuyến điều khiển
Bây giờ bạn có thể sử dụng phương thức $table->text('content')->fullText(); 2 của lớp Laravel 9 $table->text('content')->fullText(); 3 để xác định bộ điều khiển sẽ được sử dụng cho mọi tuyến đường trong một nhóm tuyến đường
use App\Http\Controllers\PostController; Route::controller(PostController::class)->group(function () { Route::get('/post/{id}', 'show'); Route::post('/post', 'store'); });Trình truy cập và trình biến đổi tốt hơn trong Eloquent
Trong Laravel 9, giờ đây bạn có thể sử dụng $table->text('content')->fullText(); 4 để khai báo tiền tố mô hình với một thuật ngữ không có tiền tố. Sử dụng một lệnh gọi phương thức, giờ đây bạn có thể nhận và đặt thuộc tính
use Illuminate\Database\Eloquent\Casts\Attribute; public function username(): Attribute { return new Attribute( get: fn ($value) => strtoupper($value), set: fn ($value) => $value, ); }$table->text('content')->fullText(); 5 chỉ mục và mệnh đề where
Nếu bạn đang sử dụng MySQL hoặc PostgreSQL trong ứng dụng Laravel của mình, giờ đây bạn có thể sử dụng phương thức $table->text('content')->fullText(); 6 trên các định nghĩa cột trong tệp di chuyển của mình để tạo chỉ mục toàn văn
$table->text('content')->fullText();Sau đó, bạn có thể sử dụng các phương thức $table->text('content')->fullText(); 7 và $table->text('content')->fullText(); 8 để thêm mệnh đề where toàn văn vào truy vấn của mình
$table->text('content')->fullText(); 0Công cụ cơ sở dữ liệu Scout mới
Laravel v9 xuất xưởng với công cụ cơ sở dữ liệu Laravel Scout mới. Nó cung cấp khả năng tìm kiếm toàn văn cho các mô hình Eloquent. Nó sử dụng các bộ quan sát mô hình để giữ cho các chỉ mục tìm kiếm đồng bộ với các bản ghi Eloquent và là một lựa chọn tốt cho các ứng dụng sử dụng cơ sở dữ liệu cỡ nhỏ hoặc trung bình hoặc có khối lượng công việc nhẹ. Công cụ này sẽ sử dụng mệnh đề “where-like” khi lọc kết quả từ cơ sở dữ liệu của bạn
Để sử dụng nó, chỉ cần thêm đặc điểm $table->text('content')->fullText(); 9 vào một mô hình
$table->text('content')->fullText(); 2Breeze API với Tiếp theo. js
Laravel v9 bao gồm một Next miễn phí. js triển khai giao diện người dùng trong bộ khởi động Breeze của nó. Bằng cách sử dụng giàn giáo bộ công cụ khởi động này, bạn có thể xây dựng các ứng dụng Laravel đóng vai trò là cả phụ trợ và giao diện người dùng JavaScript bằng cách sử dụng xác thực Laravel Sanctum
Inline Blade kết xuất
Nếu bạn cần chuyển đổi mẫu Blade thô thành HTML hợp lệ, giờ đây bạn có thể thực hiện điều đó với kết xuất Blade nội tuyến
Hơn 200 nghìn nhà phát triển sử dụng LogRocket để tạo ra trải nghiệm kỹ thuật số tốt hơn
Giao diện trình tạo truy vấn mới
Giao diện trình tạo truy vấn mới trong Eloquent cho phép nhập các truy vấn Eloquent gợi ý. Trước đây, rất khó để biết liệu bạn đang xử lý ________ 100, ________ 101 hay ______ 102, khiến các nhà phát triển phải đoán xem cần khắc phục điều gì mỗi khi TypeError xuất hiện
$table->text('content')->fullText(); 7Ràng buộc định tuyến ngầm định với enums
Giờ đây, bạn có thể nhập các gợi ý bằng PHP enum trong định nghĩa định tuyến Laravel của mình. Sau đó, Laravel sẽ chỉ gọi route nếu route chứa enum hợp lệ trong URI và sẽ trả về 404 nếu không tìm thấy một trong các enum
$table->text('content')->fullText(); 8Tuyến này sẽ chỉ được gọi nếu tuyến $table->text('content')->fullText(); 03 khớp với một trong các enum
use App\Http\Controllers\PostController; Route::controller(PostController::class)->group(function () { Route::get('/post/{id}', 'show'); Route::post('/post', 'store'); }); 0Buộc ràng buộc lộ trình phạm vi
Giờ đây, Laravel 9 có thể tự động xác định phạm vi truy vấn để truy xuất mô hình lồng nhau bởi cha của nó trong định nghĩa tuyến đường bằng cách sử dụng các quy ước để đoán tên mối quan hệ của cha. Dưới đây là một ví dụ về việc sử dụng các ràng buộc phạm vi
use App\Http\Controllers\PostController; Route::controller(PostController::class)->group(function () { Route::get('/post/{id}', 'show'); Route::post('/post', 'store'); }); 1Bạn cũng có thể sử dụng các ràng buộc phạm vi trên một nhóm định nghĩa tuyến đường
use App\Http\Controllers\PostController; Route::controller(PostController::class)->group(function () { Route::get('/post/{id}', 'show'); Route::post('/post', 'store'); }); 1Chế độ xem phân trang Bootstrap 5
Nếu bạn đã từng thử viết mã phân trang của riêng mình, bạn sẽ biết điều đó không thú vị chút nào. Laravel 9 giúp việc thêm phân trang vào các trang trong ứng dụng của bạn trở nên đơn giản hơn với các chế độ xem phân trang Bootstrap 5
Tất cả những gì bạn phải làm là bao gồm $table->text('content')->fullText(); 04 và gọi phương thức $table->text('content')->fullText(); 05 của nó trong phương thức khởi động của lớp $table->text('content')->fullText(); 06 của ứng dụng của bạn
use Illuminate\Database\Eloquent\Casts\Attribute; public function username(): Attribute { return new Attribute( get: fn ($value) => strtoupper($value), set: fn ($value) => $value, ); } 1Người trợ giúp mới
Bây giờ Laravel đang sử dụng PHP 8, mặt tiền $table->text('content')->fullText(); 07 của nó sẽ sử dụng các hàm chuỗi PHP 8, đi kèm với một số phương thức mới, bao gồm $table->text('content')->fullText(); 08, $table->text('content')->fullText(); 09 và $table->text('content')->fullText(); 20. Những người trợ giúp mới bao gồm $table->text('content')->fullText(); 21 và $table->text('content')->fullText(); 22
Các bài viết hay khác từ LogRocket
- Đừng bỏ lỡ một khoảnh khắc nào với The Replay, một bản tin được tuyển chọn từ LogRocket
- Tìm hiểu cách Galileo của LogRocket loại bỏ tiếng ồn để chủ động giải quyết các sự cố trong ứng dụng của bạn
- Sử dụng useEffect của React để tối ưu hóa hiệu suất ứng dụng của bạn
- Chuyển đổi giữa nhiều phiên bản của Node
- Khám phá cách tạo hoạt ảnh cho ứng dụng React của bạn với AnimXYZ
- Khám phá Tauri, một khuôn khổ mới để xây dựng các tệp nhị phân
- So sánh NestJS với. Thể hiện. js
Một trợ giúp khác đã được thêm vào là hàm $table->text('content')->fullText(); 23. Hàm này tạo phản hồi HTTP chuyển hướng cho một tuyến đường được đặt tên. Bạn có thể sử dụng nó để chuyển hướng đến các tuyến được đặt tên từ các tuyến và bộ điều khiển
use Illuminate\Database\Eloquent\Casts\Attribute; public function username(): Attribute { return new Attribute( get: fn ($value) => strtoupper($value), set: fn ($value) => $value, ); } 3Truyền thuộc tính Enum
Bây giờ bạn có thể chuyển các giá trị thuộc tính sang PHP enums trong Laravel 9. Dưới đây là một ví dụ về việc sử dụng phôi trong một mô hình
use Illuminate\Database\Eloquent\Casts\Attribute; public function username(): Attribute { return new Attribute( get: fn ($value) => strtoupper($value), set: fn ($value) => $value, ); } 4Sau khi bạn đã xác định phép truyền trong mô hình của mình, thuộc tính này sẽ tự động được truyền tới và từ enum
use Illuminate\Database\Eloquent\Casts\Attribute; public function username(): Attribute { return new Attribute( get: fn ($value) => strtoupper($value), set: fn ($value) => $value, ); } 5Đã kiểm tra và chọn các chỉ thị Blade
Tôi không biết mình đã tìm kiếm trên Google bao nhiêu lần, “Cách đặt hộp kiểm được chọn trong Laravel. ” Laravel v9 đã làm điều này dễ dàng hơn. Bây giờ bạn có thể sử dụng chỉ thị $table->text('content')->fullText(); 24 để đặt hộp kiểm là $table->text('content')->fullText(); 25. Nếu nó đánh giá là đúng, nó sẽ lặp lại $table->text('content')->fullText(); 25
use Illuminate\Database\Eloquent\Casts\Attribute; public function username(): Attribute { return new Attribute( get: fn ($value) => strtoupper($value), set: fn ($value) => $value, ); } 6Ngoài ra còn có một chỉ thị $table->text('content')->fullText(); 27 tương tự để thiết lập tùy chọn đã chọn trong một
use Illuminate\Database\Eloquent\Casts\Attribute; public function username(): Attribute { return new Attribute( get: fn ($value) => strtoupper($value), set: fn ($value) => $value, ); } 7Xác thực tốt hơn dữ liệu mảng lồng nhau
Lớp xác thực $table->text('content')->fullText(); 28 hiện có một phương thức $table->text('content')->fullText(); 29 mới chấp nhận một bao đóng sẽ chạy trên mỗi lần lặp của thuộc tính mảng đang được xác thực. Việc đóng sẽ trả về một mảng các quy tắc để gán cho phần tử mảng
use Illuminate\Database\Eloquent\Casts\Attribute; public function username(): Attribute { return new Attribute( get: fn ($value) => strtoupper($value), set: fn ($value) => $value, ); } 8Máy chủ tiếng vang Soketi
Laravel hiện đi kèm với máy chủ Soketi echo, một máy chủ WebSocket tương thích với Laravel Echo được viết cho Node. js. Đây là giải pháp thay thế mã nguồn mở cho Ably và Pusher dành cho các nhà phát triển muốn quản lý máy chủ WebSocket của riêng họ
Các trang ngoại lệ được cải thiện
Laravel 9 cũng có một trang ngoại lệ mới và cải tiến được thiết kế lại từ đầu. Bạn có thể chọn giữa các chủ đề sáng và tối, thậm chí nó còn có chức năng “mở trong trình chỉnh sửa”
Sơ khai di chuyển ẩn danh
Di chuyển gốc ẩn danh hiện là hành vi mặc định khi bạn thực hiện di chuyển Laravel. Tính năng này đã có trong Laravel 8. 3, nhưng là mặc định trong Laravel v9. Tính năng này ngăn xung đột tên với các lớp di chuyển. Trước khi có thay đổi này, rất khó để tạo lại cơ sở dữ liệu từ đầu nếu bạn sử dụng lại tên lớp. Giờ đây, bạn sẽ không phải lo lắng về điều này
Danh sách tốt hơn các tuyến đường trong Artisan
Laravel đã có lệnh $table->text('content')->fullText(); 30 Artisan, nhưng giờ đây nó cung cấp phân tích tốt hơn, được mã hóa màu cho các tuyến đường trong ứng dụng của bạn
hệ thống ruồi 3. x
Trong Laravel v9, Flysystem đã được di chuyển từ v1. x lên v3. x. Flysystem xử lý tất cả các chức năng thao tác tệp mà mặt tiền $table->text('content')->fullText(); 31 cung cấp. Một số thay đổi bạn sẽ thấy là
- Các phương thức $table->text('content')->fullText(); 32, $table->text('content')->fullText(); 33 và $table->text('content')->fullText(); 34 hiện ghi đè lên các tệp hiện có theo mặc định
- Các phương thức $table->text('content')->fullText(); 32, $table->text('content')->fullText(); 33 và $table->text('content')->fullText(); 34 không còn đưa ra ngoại lệ đối với lỗi ghi
- Nếu bạn cố đọc một tệp không tồn tại, thì sẽ trả về $table->text('content')->fullText(); 38
- Xóa một tệp không tồn tại hiện trả về $table->text('content')->fullText(); 39
Kiểm tra vùng phủ sóng
Lệnh Artisan $table->text('content')->fullText(); 70 hiện có tùy chọn $table->text('content')->fullText(); 71, tùy chọn này sẽ xuất tỷ lệ phần trăm phạm vi kiểm tra trong đầu ra CLI
Không còn máy chủ. tập tin php
Không phải là thay đổi lớn nhất trong danh sách, nhưng bạn không còn cần tệp $table->text('content')->fullText(); 72 trong dự án của mình nữa. Bây giờ nó sẽ được bao gồm với phần còn lại của khung
Bắt đầu với Laravel v9
Nếu bạn đã sẵn sàng dùng thử phiên bản mới của Laravel, có một số cách bạn có thể thực hiện. Nếu bạn đã cài đặt trình soạn thảo, bạn có thể tạo một dự án Laravel mới với nó
use Illuminate\Database\Eloquent\Casts\Attribute; public function username(): Attribute { return new Attribute( get: fn ($value) => strtoupper($value), set: fn ($value) => $value, ); } 9Bạn cũng có thể cài đặt Laravel trên toàn cầu với trình soạn thảo và sử dụng nó để tạo một dự án mới
$table->text('content')->fullText(); 0Nếu bạn có Docker Desktop trên máy Mac, bạn có thể chạy các lệnh này để khởi chạy hình ảnh Docker chạy Laravel 9
$table->text('content')->fullText(); 1Bạn có thể thay đổi $table->text('content')->fullText(); 73 thành bất cứ thứ gì bạn muốn. Lệnh cuối cùng sử dụng Laravel Sail, đây là giao diện dòng lệnh nhẹ để tương tác với cấu hình Docker của Laravel. Lần đầu tiên bạn chạy lệnh có thể mất vài phút. Sau đó, ứng dụng sẽ bắt đầu nhanh hơn
Trong Windows, bạn có thể chạy các lệnh tương tự ở trên trong phiên cuối mới trong hệ điều hành WSL2 Linux của mình. Các lệnh tương tự cũng hoạt động trong Linux — bạn chỉ cần cài đặt Docker Compose
Laravel 9 có đáng để chờ đợi thêm không? . Hiện tại có nhiều cải tiến và hơn thế nữa khi nhóm phát triển sẽ đẩy mạnh các tính năng mới trong phiên bản hiện tại. Nó cũng là phiên bản LTS mới, vì vậy nó sẽ xuất hiện trong một thời gian. Chúc may mắn với các ứng dụng Laravel 9 mới của bạn
Đăng NhậpTên Lửa. Khả năng hiển thị đầy đủ vào web và ứng dụng dành cho thiết bị di động của bạn
LogRocket là một giải pháp giám sát ứng dụng giao diện người dùng cho phép bạn phát lại các sự cố như thể chúng đã xảy ra trong trình duyệt của chính bạn. Thay vì đoán tại sao xảy ra lỗi hoặc yêu cầu người dùng chụp ảnh màn hình và kết xuất nhật ký, LogRocket cho phép bạn phát lại phiên để nhanh chóng hiểu điều gì đã xảy ra. Nó hoạt động hoàn hảo với bất kỳ ứng dụng nào, bất kể khung công tác nào và có các plugin để ghi lại ngữ cảnh bổ sung từ Redux, Vuex và @ngrx/store
Ngoài việc ghi nhật ký các hành động và trạng thái Redux, LogRocket còn ghi nhật ký bảng điều khiển, lỗi JavaScript, dấu vết ngăn xếp, yêu cầu/phản hồi mạng với tiêu đề + nội dung, siêu dữ liệu trình duyệt và nhật ký tùy chỉnh. Nó cũng cung cấp công cụ cho DOM để ghi lại HTML và CSS trên trang, tạo lại các video hoàn hảo về pixel của ngay cả các ứng dụng dành cho thiết bị di động và trang đơn phức tạp nhất