generated at
Laravel 5
Laravelの5.x系


frameworkのコードを読む

Laravelのソースコードはsrc/Illuminateにある

Laravelはモジュールが細分化されているので、利用しているモジュール自体も名前空間が切ってある
laravel/frameworkの名前空間と衝突しないようになっている

各コンポーネントの初期化はService providersで行われる
RountingコンポーネントならRoutingServiceProvirer.phpで行われる

LaravelのContractsはインターフェイスのこと
Illuminate/Contracts以下にはinterfaceがたくさん定義されている

LaravelのContractsとkeyの対応づけは Illuminate\Foundation\Application 行われている
当該箇所はAliasを登録している
テストを見ると、 $aliases (インターフェース等のクラス名)が $key (app, authなどの文字列)に対応して、 container からは $key を入力にインスタンスを保持するようだ
getAlias()では app などのkeyが入ってきたらそのままそれを返して、クラス名が入ってきたら対応するkeyに変換している
Alias(key)と実装クラスの対応付
$key に対応する実装クラスは config/app.php 設定ファイルの alias 書いてある

$app->make()でクラスを作成するときの流れ
Illuminate\Container\Container::resolve() Contractに対応する具象クラスを取得している
では、 resolve() で取得できる具象クラスの初期化はどこでやっている?
Service Providersで初期化している。 register でインターフェースに対する具象クラスをサービスコンテナにつめている
Service providersのドキュメントに書いてある