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

Tìm hiểu về Laravel lifecycle

0 0 19

Người đăng: Nguyen Trung Giang

Theo Viblo Asia

Chào mọi người, hôm nay mình muốn chia sẻ với mọi người về laravel lifecycle. Với kiến thức của một người đang tìm hiểu kỹ hơn về laravel như mình.

Cùng bắt đầu thôi nào!!!!

laravel là gì?

  • Đi qua lịch sử phát triển một tý thì: laravel được phát triển bởi Taylor Otwell và ra mắt vào tháng 6 năm 2011. Và sau 12 năm phát triển thì hiện tại laravel đã cho ra mắt phiên bản laravel 10.
  • Nó là một framework mã nguồn mở và được dùng để phát triển web dựa trên ngôn ngữ PHP. Và tất nhiên là nó cũng hỗ trợ các tính năng để phát triển web như RESTful routing, middlewareBlade...

Laravel lifecycle

Hình minh họa Laravel Lifecycle

  • Nói về lifecycle của laravel thì nó gồm 5 giai đoạn chính:
    • Khởi tạo ứng dụng.
    • Xử lý yêu cầu (Request).
    • Xử lý middleware.
    • Phản hồi (Response).
    • Kết thúc.

Khởi tạo ứng dụng

  • Như trên hình minh họa thì khi user gửi một Request đến ứng dụng thì file đầu tiên tiếp nhận Request đó là public/index.php. Vậy nó có gì?
<?php use Illuminate\Contracts\Http\Kernel;
use Illuminate\Http\Request; define('LARAVEL_START', microtime(true)); /*
|--------------------------------------------------------------------------
| Check If Application Is Under Maintenance
|--------------------------------------------------------------------------
*/ if (file_exists(__DIR__.'/../storage/framework/maintenance.php')) { require __DIR__.'/../storage/framework/maintenance.php';
} /*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
*/ require __DIR__.'/../vendor/autoload.php'; /*
|--------------------------------------------------------------------------
| Run The Application
|--------------------------------------------------------------------------
*/ $app = require_once __DIR__.'/../bootstrap/app.php'; $kernel = $app->make(Kernel::class); $response = tap($kernel->handle( $request = Request::capture()
))->send(); $kernel->terminate($request, $response);
  • Như bạn thấy thì ở đây laravel đã định nghĩa ra một biến là LARAVEL_START và sau đó kiểm tra xem ứng dụng có đang được bảo trì hay không.

Đăng ký cơ chế autoload

  • Tiếp đó là đăng ký autoload:
    • Ở đây __DIR__ là biến của PHP dùng để trỏ đến thư mục hiện tại.
    • Còn autoload.php là file chứa các classfunction được định nghĩa trong composer và được require vào ứng dụng.
    • Mục đích là để tải các tệp tin phụ thuộc vào trong ứng dụng.

Bắt đầu khởi tạo ứng dụng

  • Sau khi đăng ký cơ chế autoload xong laravel bắt đầu gọi đến file bootstrap/app.php.
  • Mở file này bạn sẽ thấy cách các thành phần app được khởi tạo:
/*
* Create The Application
*/
$app = new Illuminate\Foundation\Application( $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
); /*
* Bind Important Interfaces
*/
$app->singleton( Illuminate\Contracts\Http\Kernel::class, App\Http\Kernel::class
); $app->singleton( Illuminate\Contracts\Console\Kernel::class, App\Console\Kernel::class
); $app->singleton( Illuminate\Contracts\Debug\ExceptionHandler::class, App\Exceptions\Handler::class
); /*
* Return The Application
*/ return $app;
  • Khởi tạo đối tượng ứng dụng -> Đăng ký các Interfaces quan trọng -> trả về đối tượng ứng dụng đã khởi tạo.

Xử lý Request

  • Sau khi nhận được đối tượng $app thì laravel sẽ khởi tạo đối tượng Kernel để xử lý các Request.
$app = require_once __DIR__.'/../bootstrap/app.php'; $kernel = $app->make(Kernel::class); $response = tap($kernel->handle( $request = Request::capture()
))->send(); $kernel->terminate($request, $response);
  • Cuối cùng là trả về Response cho Resquest đó.

HTTP/Console Kernel

Bạn có bao giờ thắc mặc vậy làm sao mà larravel biết được Request đó cần được chuyển đến đâu để xử lý và tại sao nó lại điều hướng được Request đó.

Khi Request được gửi đến ứng dụng thì dựa vào các Route đã được định nghĩa trong ứng dụng mà các request được điều hướng đến các nới xử lý tương ứng với yếu cầu.

Và trước khi đến được với nơi xử lý yêu cầu thì Request phải vượt qua được các kiểm tra mặc định của HTTP/Console kernel tùy thuộc vào yêu cầu của Request đó. Như kiểm tra middleware, xác thực CSRF, thao tác với HTTP session...

HTTP/Console kernel hoạt động như một hộp đen với cơ chế là nhận Request và trả Response và các cuộc kiểm tra đối với Resquest cũng được thực hiện ở trong chiếc hộp đen này.

Service providers

Như bạn thấy ở trong hình minh họa thì có một bước đi quá service providers nhưng tại sao trong quá trình khởi tạo ứng dụng mình không nhắc đến nó. Vậy thì nó được chạy vào lúc nào 🤔🤔

Trong quá trình HTTP Kernel được chạy thì một trong những việc quan trong nhất của nó là tải tất cả các service providers được cấu hình trong file config/app.php.

Quá trình đó bao gồm việc Đăng kýkhởi động. Các service providers sẽ phụ trách việc khởi động các thành phần của ứng dụng như: database, router,...

Router

Tiếp theo đó là router nơi mà Request đi đến sau khi các service providers được khởi tạo.

Công việc của phần này rất đơn giản đó là đưa các Request đến với middleware tương ứng (nếu có) rồi sau đó phân bổ về với Controller/Action tương ứng.

Middleware

Như ở trên có đề cập thì có những Request sẽ được phân bổ tới Middleware trước khi đến với nới xử lý. Nên mình sẽ nói một chút về middleware ở đây.

Công việc chính của middleware là xử lý logic rằng buộc nào đó để quyết định Request đó có được đi tiếp hay không.

Ví dụ như một chức năng yêu cầu user phải có quyền là admin mới có thể thực hiện thì ở middleware sẽ kiểm tra xem user gửi request có quyền admin không còn ở trong phần xử lý sẽ không phải quan tâm việc user gửi request có phải admin hay không mà chỉ cần xử lý theo logic là được.

Cuối cùng là xử lý và trả về

Sau khi Request đã đi qua hết các bước trên thì chỉ cần xử lý yêu cầu và trả về cho người dùng kết quả (Response) tương ứng.

Kết thúc

Như vậy mình đã giới thiệu với các bạn những gì mình tìm hiểu được về laravel lifecycle rồi đấy.

Nếu trong bài viết có chỗ nào chưa đúng thì mình mong mọi người có thể góp ý để mình chỉnh sửa lại nhé 😁😁

Cảm ơn mọi người đã đọc bài viết của mì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 372

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

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

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

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