问题描述
我有以下问题。目前,我正在一个项目中开发一个新模块。问题在于,主模块仅使用onBootstrap函数(每个)来验证请求,如果不在主模块的路由上,则会返回一个未找到的404错误页面。
现在,我在新模块上的所有新路由都无法正常工作,因为onBootstrap()刚刚启动。有没有一种方法可以检查主模块中的路由是否刚刚命中,以及是否每个模块都找不到找到404错误页面的路由?
我对这个框架D =非常陌生。
示例:
MainModule.PHP
class Module
{
...
onBootstrap()
{
$request = ...->getRequest();
if($request->isNotValid()) {
return new 404Response();
}
}
...
}
class SideModule
{
...
// Never triggered
public function indexAction()
{
print("Hello World");
}
...
}
解决方法
您应该在代码的后面依赖404解析器,而不是在第一个模块引导期间。我建议摆脱在MainModule onBootstrap()
方法中返回404响应的代码,而应依赖于在应用程序引导过程中自动注入的Laminas\Mvc\View\Http\RouteNotFoundStrategy
(请参阅Laminas\Mvc\Application::bootstrap()
,这是defaultListeners所在的部分) ViewManager是defaultListener之一,并且ViewManager代表其在HttpRouteNotFoundStrategy
方法中附加Laminas\Mvc\View\Http\ViewManager::bootstrap()
。
RouteNotFoundStrategy不仅将为您的MvcEvent->getResponse()
对象设置404状态代码,还将呈现一个未找到的页面,您可以
自定义您喜欢的任何方式。有关更多信息,请参见https://docs.laminas.dev/laminas-mvc/services/。