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

Phần 1: Laravel 11 có gì mới và những thứ hay ho với phiên bản mới ra mắt

0 0 4

Người đăng: Thi Lê

Theo Viblo Asia

overview

  • Đầu tiên thứ đập vào mắt của chúng ta là laravel có một khung giao diện vô cùng mới và cũng được tinh gọn hơn về mặt source code cũng như về cấu trúc dữ liệu trong dự án và tích hợp thêm một số công nghệ mới giúp tăng hiệu suất cho dự án của bạn. Không dài dòng liên thiên nữa bây giờ thì hãy cùng mình tìm hiểu nhé!

Cấu trúc thư mục

  • Dưới đây là cấu trúc thư mục của laravel 11 sau khi đã được tinh gọn
app/
├── Http/
│ └── Controllers/
│ └── Controller.php
├── Models/
│ └── User.php
└── Providers/ └── AppServiceProvider.php
bootstrap/
├── app.php
└── providers.php
config
  • Từ cấu trúc thư mục mới có thể thấy các thành phần như app/Console, app/Exceptions, app/Http/Middleware, routes/channel.php, routes/console.php, routes/api.php đã được loại bỏ trong project base của bạn khi khởi tạo laravel và được đưa vào vendor
  • MiddlewaresExceptions cũng được di chuyển vào trong bootstrap/app.php
  • Và đây là cấu hình của file bootstrap/app.php trong phiên bản mới:
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware; return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { // }) ->withExceptions(function (Exceptions $exceptions) { // })->create(); 
  • Vì trong mục tính năng mới này có rất nhiều mục thay đổi nên mình sẽ để link thay đổi source code của version laravel 11 các bạn có thể xem thêm tại: https://github.com/laravel/framework/pull/47309

Cấu hình dự án

  • Tới phiên bản laravel 11 thì một số phần cấu hình trong thư mục config đã bị lược bỏ như:
  • config/broadcasting.php
  • config/cors.php
  • config/hashing.php
  • config/sanctum.php
  • config/view.php

API and Broadcasting

  • routes/api.php đã bị loại bỏ ở version này và nếu muốn sử dụng bạn cần cài thủ công bằng lệnh php artisan install:api khi này routes/api.php sẽ được tạo và đăng kí tại bootstrap/app.php và bạn cần thêm Laravel\Sanctum\HasApiTokens vào trong User
  • Xin giới thiệu sơ qua về Broadcasting cho những bạn nào còn chưa biết hoặc chưa có dịp sử dụng thì Broadcasting là một cơ chế cho phép bạn truyền dữ liệu từ máy chủ đến các ứng dụng web hoặc ứng dụng di động thông qua WebSocket được dùng để xây dựng các tính năng như chat, thông báo, cập nhập dữ liệu ngay lập tức ... và với version laravel 11 thì các bạn phải install thủ công bằng lệnh php artisan install:broadcast

Một số lệnh mới

  • php artisan make:enum
  • php artisan make:class
  • php artisan make:interface
class User extends Authenticatable
{ // ... protected function casts(): array { return [ 'email_verified_at' => 'datetime', 'password' => 'hashed', ]; }
}
  • Ngoài ra các bạn cũng có thể sử dụng dạng
protected function casts(): array
{ return [ 'bookOptions' => [AsCollection::class, OptionCollection::class], ];
}
  • Thêm mới function once() chỉ cho phép gọi 1 lần các bạn có thể hình dung theo ví dụ dưới nhé
class User extends Model
{ public function stats(): array { return once(function () { // Expensive operations to generate user stats, multiple db queries, etc... return $stats; }); }
}
$userA->stats();
$userA->stats(); // cached result from previous line... $userB->stats(); // Not using $userA cached results, because $userB !== $userA
$userB->stats(); 
  • Và đây là file bootstrap/app.php
  • Câu lệnh debug mới dump()
use Illuminate\Support\Traits\Dumpable; class User extends Model
{ use Dumpable;
}
... $model = User::find(1);
$model->dump(); ...
$model->dd();
  • Laravel 11 kèm với Route đã đăng ký mới /up nhằm kiểm tra tình trạng cũng như thời gian phản hồi.
return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', commands: __DIR__.'/../routes/console.php', channels: __DIR__.'/../routes/channels.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { // }) ->withExceptions(function (Exceptions $exceptions) { // })->create();
  • Thiết lập sự kiện kiểm tra với DiagnosingHealth trong file src / Illuminate / Foundation / Configuration / ApplicationBuilder.php
use Illuminate\Foundation\Events\DiagnosingHealth;
use Illuminate\Support\Facades\View; class ApplicationBuilder
{ // ... protected function buildRoutingCallback(?string $web, ?string $api, ?string $pages, ?string $health, string $apiPrefix, ?callable $then) { return function () use ($web, $api, $pages, $health, $apiPrefix, $then) { if (is_string($api) && realpath($api) !== false) { Route::middleware('api')->prefix($apiPrefix)->group($api); } if (is_string($health)) { Route::middleware('web')->get($health, function () { Event::dispatch(new DiagnosingHealth); return View::file(__DIR__.'/../resources/health-up.blade.php'); }); } if (is_string($web) && realpath($web) !== false) { Route::middleware('web')->group($web); } if (is_string($pages) && realpath($pages) !== false && class_exists(Folio::class)) { Folio::route($pages, middleware: $this->pageMiddleware); } if (is_callable($then)) { $then($this->app); } }; } // ...
}
  • Và đây là kết quả image.png

Giới hạn tốc độ

RateLimiter::for('invoices', function (Request $request) { return Limit::perSecond(1);
});

Đôi lời

  • Tới đây thì có lẽ bài viết cũng khá dài rồi cảm ơn các bạn đã quan tâm đọc hết bài chia sẻ của mình nếu có đóng góp hoặc câu hỏi gì thêm hãy để lại comment để mình ra tiếp phần 2 sớm nhất có thể nhé!

Bình luận

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

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

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 335

- 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 421

- 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

Ví dụ CRUD với Laravel và Vuejs.

1. Cài đặt Laravel. composer create-project --prefer-dist laravel/laravel vuelaravelcrud. .

0 0 141

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

Một số tips khi dùng laravel (Part 1)

1. Show database query in raw SQL format. DB::enableQueryLog(); // Bật tính năng query logging. DB::table('users')->get(); // Chạy truy vấn bạn muốn ghi log.

0 0 69

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

Inertiajs - Xây dựng Single Page App không cần API

Tiêu đề là mình lấy từ trang chủ của https://inertiajs.com/ chứ không phải mình tự nghĩ ra đâu nhé :v. Lâu lâu rồi chưa động tới Laravel (dự án cuối cùng mình code là ở ver 5.8), thế nên một ngày đẹp trời lượn vào đọc docs ver 8.

0 0 227