Laravel 4のリクエストのライフサイクル
from Laravel 5のリクエストのライフサイクル
Laravel コードからフレームワークの起動から終了までの流れを追う - Shin x blog
https://laravel.com/docs/4.2/lifecycle
リクエストのライフサイクル 4.2 Laravel
/icons/github.icon
https://github.com/laravel/laravel/tree/v4.2.11
https://github.com/laravel/framework/tree/4.2
予備知識
bootstrapのプロセスにおいてService Providersは最も重要な概念
app/config/app.phpのproviders配列にプロバイダのリストがある
これはLarravelの起動スクリプト(後述)の中でロードされる
エントリポイントにリクエストが渡された後の流れ
すべてのリクエストはWebサーバを通してpublic/index.phpにわたされる
最初のブートストラップを提供する
index.phpにリクエストが入ると、bootstrap/start.phpがロードされる
LaravelのApplicationオブジェクトが生成される
このオブジェクトはIoCコンテナ(Service Container)を提供する
projectのpathを設定する
アプリケーションやpublicのディレクトリを設定できる
(ローカル環境か本番環境なのかの)環境の検知が行われる
Laravel内部のbootstrapスクリプトframewok/start.phpが呼ばれる
ユーザのconfigファイルに基づいた設定を実施する
タイムゾーン、error reporting
PHPのmcryptextensionが存在するかのチェック
frameworkを起動する際に必要なクラスの読み込み
アプリケーションをサービスロケータに登録
などなど
ユーザのアプリケーション向けに設定されたService Providersを登録する
単純なService Providersはregister()ただ一つのメソッドをもっている
register()はapplicationオブジェクトのregister()を通じてService Providesが登録されたときに呼ばれる
register()の中で、service providesはIoCコンテナを使って様々なものを登録する
登録されるもの
基本的にどのservice providerも1つ以上のClosure (PHP)をコンテナにbindする
これによって、ユーザのアプリケーションでこれらのbindさえたサービスにアクセスできるようになる
Sevice Providerはイベントリスナーやview componests, Artisanコマンドなども登録することがある
app/startがロードされる
後述
app/routes.phpがロードされる
Requestオブジェクトがアプリケーションに送られるようになる
この後は
アプリケーションはResponseオブジェクトを返す
Responseオブジェクトはクライアントに返される
app/startが何をするのか
3つのスタートファイルがある
artisan.php
artisanコマンドに関係する
global.php
デフォルトでは基本的な項目が含まれている
Logggerの登録
ユーザのapp/filters.phpインクルード
なんでも追加していい
環境にかかわらず、すべてのリクエストで自動的にインクルードされる
local.php
local環境で動作しているときだけ呼ばれる
その他、自分で環境myenvを作ったらapp/stat/myenv.phpを同様に作成できる
ここにmyenvを追加すればよさそうkadoyau.icon
start fileに何を書くか
得意決まっていない。なんでも設定できる
例えばview composer, ログの設定、PHPの設定...
複雑になりそうなら、初期化コードをService Providerにうつしたほうがいい
アプリケーションイベント
アプリケーションへのリクエスト前後の処理を登録できる
before
after
finish
クライアントへレスポンスを送った後に呼ばれる
shutdown
finishイベントハンドラのが終了した直後
グローバルなfilterや、グローバルにレスポンスを変更したいとき
#Laravel_4