Laravel lifecycle

8/10/2021 Laravel

# Description

# Application initialization

Khởi tạo application và binding các important service (Kernel, ExceptionHandler) tại boostrap/app.php

  • Đối với Http Request, tất cả request sẽ được web server (apache, nginx) điều hướng đến file public/index.php để khởi tạo application theo config:

    # Apache
    DocumentRoot "< app directory path >/public"
    
    # Nginx
    server {
        . . .
        root < app directory path >/public;
        . . .
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    index.php

    • Load composer autoload
    • Khởi tạo Laravel Application tại boostrap/app.php
    • ResolvedIlluminate\Http\Kernel và handle kernel.
  • Đối với Console Request (khi sử dụng command cli như php artisan ..):

    xử lí khởi tại tạo file artisan tương tự như trên nhưng sẽ resolved Illuminate\Contracts\Console\Kernel

# Http/Console Kernel:

  • Http Kernel: file concrete app/Http/Kernel.php cho contract Illuminate\Http\Kernel

    • Load qua các bootstrap classes và thực hiện xử lí bootstrap trước khi xử lí request. Chi tiết hơn Laravel binding các class này vào container và run method bootstrap() của riêng từng class. Xem tại Illuminate\Foundation\Application::bootstrapWith().

      • \Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables : load environment, sử dụng package vlucas/phpdotenv
      • \Illuminate\Foundation\Bootstrap\LoadConfiguration: load tất cả config vào instance Illuminate\Config\Repository. Trường hợp đã cache config (khi run php artisan config:cache) sẽ get tại file cache/config.php còn không sẽ get tất cả file *.php trong folder config.
      • \Illuminate\Foundation\Bootstrap\HandleExceptions: set các tham số môi trường liên quan đến handle exception...
      • \Illuminate\Foundation\Bootstrap\RegisterFacades: Đăng kí các facade alias cho các instance trong config app.alias. Chi tiết facade thì có thể xem tại https://ninhnguyen22.github.io/blog/docs/nin/facade.html (opens new window)
      • \Illuminate\Foundation\Bootstrap\RegisterProviders::class: Register các service provider. Chi tiết service provider xem https://ninhnguyen22.github.io/blog/docs/nin/service-provider.html (opens new window)
      • \Illuminate\Foundation\Bootstrap\BootProviders: Binding các class liên quan của provider hoặc các xử lí riêng của provider.
    • Define các middleware cho route. Có 3 loại Glocal middleware($middleware), middleware group($middlewareGroups) và middleware route($routeMiddleware). Sử dụng Pipeline, xử lí request với từng middleware.

    • Nếu pass qua các middleware. Laravel xử lí make controller trong container và call method của controller tương ứng với request.

  • Console Kernel: to be continue..