绕过onBootstrap函数

问题描述

我有以下问题。目前,我正在一个项目中开发一个新模块。问题在于,主模块仅使用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/