SyLフレームワークの動作モデルは、クライアントのリクエストを集約させるフロントコントローラとコンテナ処理(の中のイベント)で成り立っています。
フロントコントローラパターンは、共通処理をまとめることができ個別のビジネスロジック処理に専念できるので、 同じような処理過程が多くなるWEBアプリケーションには適していると言われ、PHPに限らず他のフレームワークにも多く採用されています。
フロントコントローラが起動すると、設定ファイルに定義されたコンテナが初期化された後、各イベントが実行され、その中で個別処理を行うアクションが決定されます。 またアクションからビューが決定され、テンプレートをレンダリングし、結果をクライアントに出力します。 最後にリクエスト終了のイベントが実行されリクエストプロセスが終了します。
SyLフレームワークのイベントプロセスを列挙すると次の段階に分けることができます
[ SyLフレームワークのイベントプロセス ] (1) 起動 (2) フレームワーク初期化 (3) コンテナ初期化 (4) アクション前 (5) アクション処理 (6) アクション後、ビュー前 (7) ビュー処理 (8) ビュー後 (9) 最終 (*) エラー処理
SyLフレームワークのリクエストを集約するコントローラを起動設定値をパラメータに起動します。 具体的には、ドキュメントルート以下に設置しリクエストを集約するファイルとなり、コントローラのインスタンスを作成/起動します。
どのフレームワークを起動するかは、typeパラメータにより決定されます。 typeパラメータが指定されなかったときは、HTTP通信の場合は、WEBアプリケーションフレームワーク、コマンドラインから使用した場合は、コマンドライン(CLI)フレームワークになります。
SyLフレームワークの動作に必要な設定を初期化します。 具体的には、コントローラのコンストラクタとなり、コンテナの生成/各アプリケーションレベル定数の定義/エラーや最終処理のイベントハンドラの定義などを行います。
最初のイベントでコンテナの初期化を行います。 コンポーネントを定義した設定ファイル(components.xml)からコンポーネントをコンテナに追加し、 イベントに紐づけられた処理(インジェクション)で、リクエストの取得/URLとアクションファイルのマッピングなどが行われます。
アクションを実行する前に起動するイベントとなります。 主にアクション実行前フィルタの実行があり、イベントに紐づけられた処理(インジェクション)もあれば実行されます。
アクションを実行するイベントとなります。 URLとアクションの設定ファイル(actions.xml)から実行するアクションを特定し、アクションを実行します。 また、アクション内のローカルコンポーネントの生成やイベントに紐づけられた処理もあれば実行されます。
アクション実行後のイベントとなります。 主にアクション実行後フィルタの実行があり、イベントに紐づけられた処理(インジェクション)もあれば実行されます。
表示する画面を作成するイベントです。 アクション実行結果値を取得し、テンプレートファイルに設定して、表示する画面を生成します。 画面を生成後、クライアントに出力します。 また、イベントに紐づけられた処理(インジェクション)もあれば実行されます。
ビュー実行後のイベントとなります。 主にビュー実行後フィルタの実行があり、イベントに紐づけられた処理(インジェクション)もあれば実行されます。
リクエストの最後に実行されるイベントです。 「(2) フレームワーク初期化」時に登録された、処理終了時にコールされるハンドラが実行されます。
エラーハンドラにより起動されるイベントです。 「(2) フレームワーク初期化」時登録された、例外ハンドラが実行されます。例外ではないPHPのエラー(E_WARNING、E_NOTICE など)はエラーハンドラを経由して例外ハンドラが実行されます。
SyLフレームワークでは、アクセスされたURLをアクションやテンプレートとマッピングする条件に PATH_INFO を使用します。
例えば下記のようなURLでアクセスした場合、
http://example.com/example1.php/example2.html
ドキュメントルート直下の「example1.php」ファイルに、「/example2.html」のPATH_INFO環境変数でアクセスしたことになり、 実際のアクションファイルは、「(アクションディレクトリ)/example2.php」が実行されます。
/[フロントコントローラ][PATH_INFO] 上の例では、 [フロントコントローラ] => example1.php [PATH_INFO] => /example2.html
「フロントコントローラ」は必ず必要になりますが、ドキュメントルート以下のどの階層のディレクトリに配置しても、
動作する柔軟性があります(要コントローラ内の設定変更)。
またWEBサーバー側の設定によっては、拡張子(.php)が無くても動作させることができ、
外部から動的ページであることを隠蔽することもできます。
「PATH_INFO」は任意で、指定されない場合はデフォルトのアクションファイルが実行されます。 外面上は「.html」と静的ページのようですが、アクションファイルは「.php」の拡張子に変換されて実行されます。 外面上は拡張子「.html」の静的ページに見えるので、見た目もSEO的にもやさしくなります。
また、mod_rewrite を使用することでフロントコントローラの存在をURLから隠蔽し、下記のようなスマートなURLにすることもできます。
http://example.com/example2.html