首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在FuelPHP中获得不可路由的HMVC请求

无法在FuelPHP中获得不可路由的HMVC请求
EN

Stack Overflow用户
提问于 2012-03-31 06:53:26
回答 1查看 1.5K关注 0票数 0

FuelPHP文档中,它有以下示例:

代码语言:javascript
复制
// or fetch the output of a module
$widget = Request::forge('mymodule/mycontroller/mymethod/parms', false)->execute();
echo $widget;

当我调用的函数具有action_前缀时,这是有效的,但是当我删除前缀时(因为我不希望浏览器调用它),即使我将第二个参数设置为false,它也不再工作了。

下面是一个示例:

WORKS

在一个控制器中,我调用:

代码语言:javascript
复制
$widget = Request::forge('mymodule/mycontroller/mymethod')->execute();
echo $widget;

在肌控器中:

代码语言:javascript
复制
public function action_mymethod()
{
    echo 'works';
}

与404失败

在一个控制器中,我调用:

代码语言:javascript
复制
$widget = Request::forge('mymodule/mycontroller/mymethod', false)->execute();
echo $widget;

在肌控器中:

代码语言:javascript
复制
public function mymethod()
{
    echo 'works';
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-31 15:51:35

无法删除动作前缀。

您不理解FuelPHP中的HMVC是如何工作的。从控制器的角度来看,一个请求就是一个请求,不管它来自何处。可以从URL (主请求)或通过辅助请求(HMVC)调用任何操作。

请求的第二个参数::forge()方法只控制路由。如果为true (默认值),则请求通过路由引擎发送,因此当将请求URI映射到控制器/方法时,路由将应用。如果为false,则绕过路由引擎,并对控制器/方法进行直接映射。

如果路由表在末尾包含一个catch,则需要这样做,以避免路由到内部控制器。这是屏蔽控制器不被主请求调用的首选方法。

如果您有带有公共方法和内部方法的控制器,那么使用路由选项就会变得很复杂,因为您需要从catch_all中排除一些URI。

在这种情况下,可以使用以下方法检查控制器操作中的请求类型:

代码语言:javascript
复制
\Request::is_hmvc()

如果您的操作由主请求(即通过浏览器URL)调用,则返回false;如果是HMVC调用,则返回true。如果您想要显示您的404,可以重定向到其他地方,或者抛出一个HttpNotFoundException。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9953763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档