リクエストライフサイクル

concrete5のリクエストはウェブディレクトリの index.php にアクセスするところから開始します。このファイルは単に concrete/dispatcher.php をインクルードしていますので、実際の挙動はそちらに書かれています。

内部設定の読み込み

まず、concrete/bootstrap/configure.php ファイルがインクルーとされ、設定値が読み込まれます。これらは内部のファイルパスや様々なファイルやアイコンの名前などで、全て定数値になっています。このファイル内の値は、これ以前にオーバーライドすることはできません。C5_EXECUTE(concrete5が正しい環境で実行されているかを確認する値)を含むこれらは内部的な定数値です。

オートローダーの読み込みと初期化

次に、/concrete/bootstrap/autoload.php を読み込むことでPHPオートローダーをセットアップします。このファイルは configure.php よりは興味深いと思います。

  1. application/bootstrap/autoload.php からコンテンツを読み込みます。このファイルはComposerによって提供される全てのサードパーティーのライブラリー(concrete/vender/ に格納されています)を読み込みます。
  2. concrete5のクラスローダー(src/Foundation/Classloader.php)を読み込み初期化します。

これらの2つの読み込みが完了すると、includeやLoaderを使わなくても、全てのクラスは自動的に読み込まれます。

concrete5アプリケーションの作成

bootstrap/start.php がconcrete5アプリケーションのインスタンスを作成します。このアプリケーションインスタンスはLaravelのContainerオブジェクトを継承した \Concrete\Core\Application\Application クラスのインスタンスです。このアプリケーションインスタンスは環境毎に異なる設定値を読み込むことができます。

設定値の読み込み

設定値は次の順序で読み込まれます。

  1. Configurationローダーとセーバーが作られます。
  2. まだ存在しない場合、Config内のdate_default_timezone_getからタイムゾーン情報が設定されます。
  3. クラスエイリアスが concrete/config/app.php から作成されます。
  4. クラスファサードが concrete/config/app.php から作成されます。
  5. データベースローダーとセーバーの設定ライブラリが作成されます。
  6. サービスプロバイダーとサービスが concrete/config/app.php の 'providers' 配列から登録されます。
  7. アセット、アセットグループ、ルート、テーマパス、ファイルタイプ、インポーター属性が concrete/config/app.php から読み込まれます。

concrete/config/app.php の値は application/config/app.php から上書きすることができます。

アプリケーションの app.php の読み込み

application/bootstrap/app.php ファイルが読み込まれます。このファイルはデフォルトではコメントでサンプルが書かれているだけで空です。イベントの登録、カスタムサービスの再バインド、カスタムルートなどがこのファイルから行なえます。

インストールのチェック

ここでconcrete5は application/config/database.php が存在するかをチェックし、存在しなければインストールが未完了と判断して /install ルートを出力します。存在していれば、そのまま次に進みます。

ページキャッシュのチェック

次に、現在のHTTPリクエストもとにページキャッシュをチェックし、現在のリクエストに対応するキャッシュファイルが存在する場合は、データベースへの接続を開始せずにキャッシュファイルを表示します。キャッシュファイルがなかった場合は、次に進みます。

プリプロセス

次に、concrete/bootstrap/preprocess.php が実行されます。このファイルは現在のところ magic_quotes_gpc の副作用を回避するためだけに使われています。

ローカライズ

次に、サイトのロケールかユーザーの設定から、サイトのアクティブ言語を設定します。次にローカライズライブラリを起動します。

URL リダイレクト

次に、ユーザーがアクセスしたURLの末尾のスラッシュやリダイレクト設定にしたがって、ユーザーをリダイレクトします。

自動アップデートの処理

次に、自動バックグラウンドアップデートが有効になっているかをチェックし、有効でかつconcrete5のバージョンが新しくなっていたら、バックグラウンドでアップデートを実行します。

パッケージの on_start() イベントを実行

パッケージの controller.php によっては on_start() メソッドが定義されていることがあります。全てのインストール済みのパッケージの on_start() メソッドがここで実行されます。

リクエストの処理

最後に、現在のRequestオブジェクトを取得し、先に作成されているApplicationオブジェクトを通して処理します。ここでURLが解析され、URLに対応した登録済みのルートが探され、ページが読み込まれます。

原文:Request Lifecycle