在FuelPHP文档中,它有以下示例:
// or fetch the output of a module
$widget = Request::forge('mymodule/mycontroller/mymethod/parms', false)->execute();
echo $widget;当我调用的函数具有action_前缀时,这是有效的,但是当我删除前缀时(因为我不希望浏览器调用它),即使我将第二个参数设置为false,它也不再工作了。
下面是一个示例:
WORKS
在一个控制器中,我调用:
$widget = Request::forge('mymodule/mycontroller/mymethod')->execute();
echo $widget;在肌控器中:
public function action_mymethod()
{
echo 'works';
}与404失败
在一个控制器中,我调用:
$widget = Request::forge('mymodule/mycontroller/mymethod', false)->execute();
echo $widget;在肌控器中:
public function mymethod()
{
echo 'works';
}发布于 2012-03-31 15:51:35
无法删除动作前缀。
您不理解FuelPHP中的HMVC是如何工作的。从控制器的角度来看,一个请求就是一个请求,不管它来自何处。可以从URL (主请求)或通过辅助请求(HMVC)调用任何操作。
请求的第二个参数::forge()方法只控制路由。如果为true (默认值),则请求通过路由引擎发送,因此当将请求URI映射到控制器/方法时,路由将应用。如果为false,则绕过路由引擎,并对控制器/方法进行直接映射。
如果路由表在末尾包含一个catch,则需要这样做,以避免路由到内部控制器。这是屏蔽控制器不被主请求调用的首选方法。
如果您有带有公共方法和内部方法的控制器,那么使用路由选项就会变得很复杂,因为您需要从catch_all中排除一些URI。
在这种情况下,可以使用以下方法检查控制器操作中的请求类型:
\Request::is_hmvc()如果您的操作由主请求(即通过浏览器URL)调用,则返回false;如果是HMVC调用,则返回true。如果您想要显示您的404,可以重定向到其他地方,或者抛出一个HttpNotFoundException。
https://stackoverflow.com/questions/9953763
复制相似问题