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 は、現在のリクエストの中で作成された すべてのリクエストです。