HMVC 請求 - 一般
优质
小牛编辑
131浏览
2023-12-01
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。