【问题标题】:Bypass onBootstrap() Function绕过 onBootstrap() 函数
【发布时间】:2020-08-10 17:48:18
【问题描述】:

我有以下问题。目前我在一个项目中工作,我应该开发一个新模块。问题是,主模块只是使用 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");
}

...

}

【问题讨论】:

    标签: php zend-framework laminas


    【解决方案1】:

    您应该在后面的代码中依赖 404 解析器,而不是在您的第一个模块的引导期间。我建议摆脱在 MainModule onBootstrap() 方法中返回 404 响应的代码,而是依赖于在应用程序引导期间自动注入的 Laminas\Mvc\View\Http\RouteNotFoundStrategy(请参阅Laminas\Mvc\Application::bootstrap(),附加了 defaultListeners 的部分。ViewManager 是其中之一defaultListeners 和 ViewManager 代表它在 Laminas\Mvc\View\Http\ViewManager::bootstrap() 方法中附加 HttpRouteNotFoundStrategy)。

    RouteNotFoundStrategy 不仅会为您的MvcEvent->getResponse() 对象设置一个 404 状态码,还会呈现一个未找到的页面,您可以 自定义您喜欢的任何方式。请参阅https://docs.laminas.dev/laminas-mvc/services/ 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 2013-03-03
      • 1970-01-01
      相关资源
      最近更新 更多