Các tính năng mới nổi bật đáng chú ý của laravel 9

Laravel 9 tiếp tục cải tiến được thực hiện trong Laravel 8.x bằng cách giới thiệu hỗ trợ cho các thành phần Symfony 6.0, Symfony Mailer, Flysystem 3.0, cải tiến route:list đầu ra, trình điều khiển cơ sở dữ liệu Laravel Scout, cú pháp Eloquent accessor / mutator, liên kết thông qua Enums và nhiều

Laravel 9 tiếp tục cải tiến được thực hiện trong Laravel 8.x bằng cách giới thiệu hỗ trợ cho các thành phần Symfony 6.0, Symfony Mailer, Flysystem 3.0, cải tiến route:list đầu ra, trình điều khiển cơ sở dữ liệu Laravel Scout, cú pháp Eloquent accessor / mutator, liên kết thông qua Enums và nhiều loại sửa các lỗi khác và cải tiến.

PHP Version

Laravel 9 yêu cầu sử dụng phiên bản PHP 8,0 – 8,1 và Symfony 6.0

Controller route groups

Bạn có thể sử dụng controller phương thức của lớp của Laravel 9 Route

use AppHttpControllersPostController;

Route::controller(PostController::class)->group(function () {
    Route::get('/post/{id}', 'show');
    Route::post('/post', 'store');
});

Better accessors and mutators in Eloquent

Trong Laravel 9, bạn có thể sử dụng Illuminate Database Eloquent Casts Attribute để khai báo một tiền tố. Sử dụng một lệnh gọi phương thức, bây giờ bạn có thể vừa lấy và set thuộc tính.

use IlluminateDatabaseEloquentCastsAttribute;

public function username(): Attribute
{
  return new Attribute(
    get: fn ($value) => strtoupper($value),
    set: fn ($value) => $value,
  );
}

Fulltext indexes and where clauses

Nếu bạn đang sử dụng MySQL hoặc PostgreSQL trong ứng dụng Laravel của mình, bây giờ bạn có thể sử dụng fulltext phương pháp trên định nghĩa cột trong migration của mình để tạo chỉ mục toàn văn bản.

$table->text('content')->fullText();

Sau đó, bạn có thể sử dụng các phương thức whereFullTextorWhereFullText để thêm vào câu truy vấn của mình.

$laravelPosts = DB::table('post')
           ->whereFullText('content', 'laravel')
           ->get();

The new Scout database engine

Laravel v9 ra mắt 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 bản cho các mô hình Eloquent. Công cụ này sẽ sử dụng các mệnh đề “where-like” khi lọc kết quả từ cơ sở dữ liệu của bạn.
Để sử dụng bạn chỉ cần thêm vào model của mình: LaravelScoutSearchable

<?php
namespace AppModels;

use IlluminateDatabaseEloquentModel;
use LaravelScoutSearchable;

class Article extends Model
{
    use Searchable;
}

Breeze API with Next.js

Laravel v9 bao gồm triển khai giao diện người dùng Next.js trong Breeze. Bằng cách sử dụng bộ khung này, bạn có thể xây dựng các ứng dụng Laravel đóng vai trò như phần 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 rendering

Nếu bạn cần chuyển đổi một mẫu Blade thành HTML, bây giờ bạn có thể làm điều đó với Blade nội tuyến.

use IlluminateSupportFacadesBlade;

return Blade::render('Hello, {{ $name }}', ['name' => 'Stephan Miller']);

New query builder interface

Giao diện trình tạo truy vấn mới trong Eloquent giúp bạn có thể nhập các truy vấn gợi ý Eloquent. Trước đây, rất khó để biết liệu bạn có đang xử lý hay không , hay để các developer đoán xem cần khắc phục điều gì bất cứ khi nào TypeError xuất hiện.

return Model::query()
  ->whereNotExists(function($query) {
    // $query is a QueryBuilder
  })
  ->whereHas('relation', function($query) {
    // $query is an EloquentBuilder
  })
  ->with('relation', function($query) {
    // $query is an EloquentRelation
  });

Implicit route bindings with enums

Bây giờ bạn có thể nhập các gợi ý với một enum PHP trong Laravel của bạn. Sau đó, Laravel sẽ chỉ gọi ra biến trong enum hợp lệ trong URI và sẽ trả về 404 nếu một trong các enum không được tìm thấy.

enum Fruit: string
{
    case Apple = 'apple';
    case Cherry = 'cherry';
}

Sử dụng trong router

Route::get('/fruits/{fruit}', function (Fruit $fruit) {
    return $fruit->value;
});

Forced scope route bindings

Laravel 9 có thể tự động xác định phạm vi truy vấn để truy xuất một mô hình lồng nhau bởi parent của nó bằng cách sử dụng các quy ước để đoán tên mối quan hệ kế thừa. Ví dụ:

use AppModelsArticle;
use AppModelsUser;

Route::get('/users/{user}/articles/{article}', function (User $user, Article $article) {
    return $article;
})->scopeBindings();

Bạn cũng có thể sử dụng các ràng buộc phạm vi

use AppModelsArticle;
use AppModelsUser;

Route::get('/users/{user}/articles/{article}', function (User $user, Article $article) {
    return $article;
})->scopeBindings();

Bootstrap 5 pagination views

Thay vì việc viết phân trang của riêng mình bạn có thể phân trang với các chế độ xem phân trang trong Bootstrap 5.

use IlluminatePaginationPaginator;

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Paginator::useBootstrapFive();
}

New helpers

Laravel 9 đang sử dụng PHP 8, IlluminateSupportStr mặt tiền 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 str_contains, str_starts_withstr_ends_with. Những người trợ giúp mới bao gồm appendsnake.

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ