Laravel 11 có gì mới?

Laravel 11 có gì mới?
Laravel 11: Bước tiến mới đầy bí ẩn. Cùng khám phá những tính năng đột phá và thay đổi đáng chú ý.

Cấu trúc ứng dụng nhẹ nhàng hơn 

 

Với sự giới thiệu của Laravel 11, đã đến lúc làm sạch và xác định lại cách cấu trúc một ứng dụng Laravel. Mục tiêu để đưa ra một điểm khởi đầu nhỏ gọn và hiệu quả hơn cho dự án của bạn. Và thực sự Laravel team đã làm được điều đó.  

 

Tệp bootstrap/app.php hoàn toàn mới 

 

Ở đây, bạn có thể điều chỉnh định tuyến ứng dụng, middleware, service providers, xử lý ngoại lệ và nhiều thứ khác - tất cả từ một nơi duy nhất.

 

Giản lược service providers

 

Laravel 11 nói không với việc xử lý nhiều service providers. Bây giờ, chỉ còn một AppServiceProvider duy nhất. Thay đổi này tập trung các chức năng của các service providers cũ vào bootstrap/app.php hoặc AppServiceProvider, làm cho mã nguồn của bạn trở nên ngăn nắp hơn. 

 

Tệp định tuyến API và broadcast tuỳ chọn

 

Không phải ứng dụng nào cũng cần tính năng API và broadcast ngay từ đầu. Laravel 11 nhận ra điều này bằng cách không bao gồm các tệp định tuyến api.php và channels.php theo mặc định. Chỉ cần một lệnh Artisan đơn giản là có thể. Tính linh hoạt của Laravel thể hiện ở đây, cho phép bạn thêm tính năng chỉ khi bạn cần.

php artisan install:api
php artisan install:broadcasting

 

Các lớp middleware mặc định đã biến mất

 

Laravel 11 đã di chuyển các middleware này vào bản thân framework, cho phép bạn tận hưởng một cấu trúc ứng dụng sạch sẽ mà vẫn có khả năng tùy chỉnh hành vi middleware từ bootstrap/app.php.

->withMiddleware(function (Middleware $middleware) {
    $middleware->redirectGuestsTo('/admin/login');
})

 

Xử lý ngoại lệ đã được di chuyển vào bootstrap/app.php

 

Việc xử lý ngoại lệ cũng đã được di chuyển vào bootstrap/app.php. Điều này giữ cho cấu trúc ứng dụng của bạn nhỏ gọn và đồng nghĩa với việc bạn không phải tìm kiếm qua nhiều tệp tin để quản lý các ngoại lệ.

Đây là đoạn mà ghi chú phát hành của Laravel 11:

->withExceptions(function (Exceptions $exceptions) {
    $exceptions->dontReport(MissedFlightException::class);
 
    $exceptions->reportable(function (InvalidOrderException $e) {
        // ...
    });
})

 

Lập lịch trình công việc trực tiếp trong routes/console.php

 

Lập lịch công việc bây giờ đơn giản như thêm một vài dòng vào tệp routes/console.php của bạn, nhờ vào facade Schedule mới. Không còn cần kernel console nữa.

Trong routes/console.php:

use Illuminate\Support\Facades\Schedule;
 
Schedule::command('some-service:sync')->daily();

 

Lớp controller vô cùng cơ bản

 

Lớp controller cơ bản trong Laravel 11 đã tinh giảm đáng kể. Các traits AuthorizesRequests và ValidatesRequests vẫn còn tồn tại, nhưng bạn cũng phải thao tác để sử dụng chúng.

Ví dụ, nếu bạn đang sử dụng chính sách và muốn kiểm tra quyền, bạn phải bao gồm trait AuthorizesRequests trong lớp controller cơ bản của bạn (app/Http/Controllers/Controller.php):

namespace App\Http\Controllers;
 
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
 
abstract class Controller
{
    use AuthorizesRequests;
}

 

 

Route mới giúp kiểm tra status của ứng dụng

 

Laravel 11 giới thiệu một route mới giúp kiểm tra status của ứng dụng (health-check) cho phép bạn thực hiện các kiểm tra khác nhau cho các phần khác nhau của ứng dụng và đảm bảo mọi thứ đang hoạt động một cách suôn sẻ.

Route này có thể được xác định trong bootstrap/app.php như sau:

->withRouting(
    web: __DIR__.'/../routes/web.php',
    commands: __DIR__.'/../routes/console.php',
    health: '/up',
)

Khi route được truy cập, một sự kiện Illuminate\Foundation\Events\DiagnosingHealth được phát đi.

 

Giới hạn truy cập theo giây

 

Việc giới hạn truy cập trong Laravel rất dễ thiết lập. Với Laravel 11, bạn có thể giới hạn truy cập theo giây.

Hãy xem ví dụ sau:

RateLimiter::for('invoices', function (Request $request) {
    -return Limit::perMinute(120);
    +return Limit::perSecond(2);
});
  1. Nếu chúng ta giới hạn số lượng yêu cầu trong một phút, điều đó có nghĩa là người dùng của bạn cũng có thể gửi 120 yêu cầu trong một giây.
  2. Nhưng nếu chúng ta giới hạn số lượng yêu cầu trong một giây, người dùng của bạn sẽ không thể gửi 120 yêu cầu trong một giây, nhưng vẫn bị giới hạn ở 120 yêu cầu trong một phút.

 

Phương thức mới Model::casts()

 

Thường trong Laravel, bạn khai báo việc chuyển đổi thuộc tính trong một model Eloquent như sau:

class User extends Model
{
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

Đối với Laravel 11, bạn có thể xác định việc chuyển đổi thông qua một phương thức casts() trong model của bạn, cho phép bạn sử dụng các phương thức tĩnh với tham số.

class User extends Model
{
    protected function casts() : array
    {
        return [
            'foo' => AsCollection::using(FooCollection::class),
        ];
    }
}

Bạn cũng có thể xác định việc chuyển đổi dưới dạng một mảng:

class User extends Model
{
    // Even in the old $casts property!
    protected $casts = [
        'foo' => [AsCollection::class, FooCollection::class],
    ];
 
    protected function casts() : array
    {
        return [
            'foo' => [AsCollection::class, FooCollection::class],
        ];
    }
}

Lưu ý: Phương thức casts sẽ được ưu tiên hơn thuộc tính $casts

 

Xuất hiện trait mới là Dumpable

 

Trait này cho phép người dùng Laravel và tác giả gói mở rộng dễ dàng bao gồm các phương thức gỡ lỗi trong các lớp của họ bằng cách sử dụng trait này.

Ví dụ: 

<?php
 
namespace App\ValueObjects;
 
use Illuminate\Support\Traits\Dumpable;
use Illuminate\Support\Traits\Conditionable;
 
class Address
{
    use Conditionable, Dumpable;
 
    // ...
}
 
$address = new Address;
 
// Before:
$address->foo()->bar();
 
// After:
$address->foo()->dd()->bar();

 

 

Ngừng hỗ trợ cho PHP 8.1

 

PHP 8.2 đã được khẳng định và PHP 8.3 hiện là phiên bản PHP mới nhất. Laravel có thể tiến lên phía trước và bỏ bỏ hỗ trợ cho 8.1.

Nhưng hãy nhớ: Ứng dụng Laravel của bạn không cần phải được cập nhật lên phiên bản mới nhất ngay khi nó được phát hành.

Đặc biệt là nếu bạn có các dự án có khách hàng trả phí hoặc nhân viên phụ thuộc vào chúng để làm việc.

Những dự án đó cần di chuyển từ từ nhưng chắc chắn bằng cách thực hiện kiểm tra kỹ lưỡng. Đừng vội vàng.

Hồ Hữu Hiền

Mình là developer nên đôi khi viết bài không hay lắm mong các bạn thông cảm. Nếu muốn biết thêm thông tin về mình thì vui lòng vào website này để biết. https://huuhienqt.dev/

Bình luận (0)