HMVC 請求

HMVC 請求是一个很好的方式來分離邏輯和重複使用控制器邏輯到多个地方。 常見的用法之一是當你使用一个主題或樣板引擎來產生你的頁面時, 每一个頁面分成幾个區塊,而區塊被部件填充。 藉由使用模組產生部件的輸出,你可使用易於重複使用的元件,建立一个高度模組化的应用程序。

你使用 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' 做为第二个參数到 forge() 呼叫。如果你不这樣做,當你执行該請求時,你将以一个 404 错误結束!

在 HMVC 請求中載入檢視與在一般請求中是相同的,且 HMVC 請求的控制器存取, 藉由瀏覽器也同樣平易近人。然而,在一些情況下,你可能不希望元件(例如,一个部件) 透過瀏覽器被存取。在这種情況下,你将想要檢查是否請求是透過 HMVC 或瀏覽器。 以下範例告訴你如何檢查一个 HMVC 請求:

<?php

class Controller_Widget extends Controller
{

	public function action_show()
	{
		if( ! Request::is_hmvc())
		{
			// 这是主要的請求
		}
		else
		{
			// 这是一个 HMVC 請求
		}
	}

}

404 在 HMVC 請求期間

當 404 发生在一个 HMVC 請求期間,一个 HttpNotFoundException 被拋出。如果未被捕捉到, 它将觸发框架預設 404 頁面的載入。然而,你可以避免这樣并且自己处理 404:

try
{
	\Request::forge('this_will_fail');
}
catch (HttpNotFoundException $e)
{
	// 处理它
}

穿越 Request 實例

如果你想存取其他 Requests,你可以使用兩種方法穿越它們: $request->parent()$request->children()。parent 是在目前 Request 被建立(給主要 Request 的 null)期間的 Request。children 是在目前 Request 期間建立的所有 Request。