HMVC リクエスト
HMVC リクエストは、複数の場所で、ロジックの分離とコントローラロジックを再利用するための優れた方法です。 1 つのよくある使用法は、テーマやテンプレートエンジンを使用してページを生成するときに、 各ページはセクションに分かれていて、セクションはウィジェットによって表示されます。 モジュールを使用してウィジェットの出力を生成する、高度にモジュール化され簡単にコンポーネントを再利用できるアプリケーションを作成できます。
Request クラスを使うと、モジュールコントローラのメソッドを呼び出せます:
// コントローラの出力を取得する
$widget = Request::forge('mycontroller/mymethod/parms')->execute();
echo $widget;
// または、モジュールの出力を取得する
$widget = Request::forge('mymodule/mycontroller/mymethod/parms', false)->execute();
echo $widget;
// そして、データを渡す必要があるなら
$widget = Request::forge('mymodule/mycontroller/mymethod/parms', false)->execute(array('tree'=>'apple'));
echo $widget;
デフォルトでは、すべてのリクエストは、Fuel のルーティングエンジンによって処理されます。 もし、ルーティング可能でないリクエストをしたい場合 (たとえば、ブラウザからそれをリクエストされたくない場合)、'false' を 2 番目のパラメータとして forge() の呼び出しに渡す必要があります。 そうしない場合、リクエストを実行すると、404 エラーで終了します!
HMVC リクエストでのビューのロードは、通常のリクエストの場合と同じで、HMVC リクエストによりアクセスされるコントローラも ブラウザを経由してアプローチできます。 しかし、いくつかのケースではコンポーネント (例えば、ウィジェット) に ブラウザ経由でアクセスされたくないことがあります。 これらのケースでは、リクエストが HMVC 経由かブラウザ経由かを、確認するとよいでしょう。 次の例は、HMVC リクエストを確認する方法を示しています:
<?php
class Controller_Widget extends Controller
{
public function action_show()
{
if( ! Request::is_hmvc())
{
// これがメインのリクエスト
}
else
{
// これが HMVC リクエスト
}
}
}
HMVC リクエスト中での 404
HMVC リクエストの中で 404 が発生した場合、 HttpNotFoundException が投げられます。もし、キャッチされない場合、 フレームワークのデフォルトの 404 ページのロードをもたらします。しかしながら、そうしないようにその 404 を自分で扱うこともできます :
try
{
\Request::forge('this_will_fail');
}
catch (HttpNotFoundException $e)
{
// 404 を処理する
}
リクエストインスタンスの横断
あなたが他のリクエストにアクセスしたい場合は、次の 2 つの方法があります: $request->parent() と $request->children() です。parent は現在のリクエストが作成されたリクエストです (メインのリクエストでは null になります)。children は、現在のリクエストの中で作成された すべてのリクエストです。