新手看 Laravel 的生命週期


新手看 Laravel 的生命週期

前言

上一篇文章--可以請你說明一下,前端的資料跟後端是如何交換的嗎?,偷偷的略過 Laravel 前面的運作流程,但是這樣是不行的,還是要好好了解當請求進來後 Laravel 做了什麼!

新手看 Laravel 的生命週期

首先開一下官方文件...嗯嗯,好像都看不懂呢。
官方文件表示:所有的請求都透過你的網頁伺服器(Apache / Nginx)的設定導向這個檔案。
總之先來看看 index.php 吧。

<?php
define('LARAVEL_START', microtime(true));

// Register The Auto Loader
// index.php 此檔案會載入由 Composer 產生的自動載入器定義

require __DIR__.'/../vendor/autoload.php';

// Turn On The Lights
// 擷取由 bootstrap/app.php 指令稿所產生的 Laravel 應用程式實例

$app = require_once __DIR__.'/../bootstrap/app.php';

// 創建一個應用程式/服務容器的實例

// Run The Application
// 進入應用程式的請求的會被送往 HTTP 核心或終端核心,視該請求的種類而定

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

// kernel 做的事:接收一個 Request 並回傳一個 Response

$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);

$response->send();
$kernel->terminate($request, $response);

搭配程式碼好像比較懂官方文件在寫什麼了(?

接下來是服務提供者 Service Provider
官方文件:所有提供者的 register 方法會被呼叫,一旦所有提供者都被註冊之後,boot 方法就會被呼叫。

打開 config/app.php 找到 providers

    'providers' => [
        /*
         * Application Service Providers...
         */
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        // App\Providers\BroadcastServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,
        //略
    ],

再看看最基本的 App\Providers\AppServiceProvider::class 寫什麼

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        // 在這裡將事物綁定至服務容器
    }

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

嗯嗯好,東西都在(?

那來看接下來寫什麼...請求分派 dispatch request by router
官方文件:一旦應用程式被啟動且所有的服務提供者都被註冊之後,Request 將被移轉給路由器進行分派。路由器會將請求分派給路由或控制器,並執行任何特定路由的中介層。

看完了,嗯還是不懂,只好再去找找原始碼,找到了看起來跟分配路由有關的方法是在 Illuminate/Routing/Router 找到 ->router->dispatch($request)

但看到這裡已經深夜了,先這樣...

總結

源碼太難,看不懂呢 :)

參考資料

#Laravel #後端 #新手 #面試





一個新手的筆記。本系列文適合有多年程式開發經驗者,或具備思考與查證能力者閱讀。適合程式課程開發者參考,可以了解新手可憐的小腦袋;嚴禁寫作業照抄,一定不及格。

留言討論