如何在模块内重定向并在 ZF3 中限制没有 exit() 的访问?



My Zend Framework 3 应用程序管理订单:

  • 每个用户都可以下订单。
  • 每个用户都可以看到任何订单。
  • 每个用户都可以编辑他的订单,如果他是这个订单的创建者。否则,他将获得403的状态代码并被重定向到相应的页面。

MyModuleModule#onRoute(...)中实现如下:

public function onRoute(EventInterface $event)
{
if ($event->getRequest() instanceof HttpRequest) {
...
if (! $acl->isAllowed($role, $controller, $action)) {
/** @var Response $response */
$response = $event->getResponse();
$config = $serviceManager->get('config');
$redirectRoute = ! empty($config['acl']['redirect_route']) ? $config['acl']['redirect_route'] : null;
if (! empty($redirectRoute)) {
$url = $event->getRouter()->assemble($redirectRoute['params'], $redirectRoute['options']);
$response->getHeaders()->addHeaderLine('Location', $url);
$response->setStatusCode(Response::STATUS_CODE_403);
$response->sendHeaders();
exit(); // <-- this makes the code untestable
} else {
...
}
}
} elseif ($event->getRequest() instanceof ConsoleRequest) {
...
}
}

它正在工作。 但是现在,我正在编写集成测试,这个exit()调用打破了它们。

在这个地方的exit()替代方案以及Module类中适当/干净的重定向方式是什么?

它适用于状态代码302(而不是403(:

$response->setStatusCode(Response::STATUS_CODE_302);

Http Resopnse代码"403"不是重定向代码,它只是针对客户端错误。

以下代码可用于重定向-

// REDIRECTION CODES
300 => 'Multiple Choices',
301 => 'Moved Permanently',
302 => 'Found',
303 => 'See Other',
304 => 'Not Modified',
305 => 'Use Proxy',
306 => 'Switch Proxy', // Deprecated
307 => 'Temporary Redirect',

现在按点

- 每个用户都可以编辑他的订单,如果他是这个订单的创建者。否则,他将获得状态代码 403 并被重定向到相应的页面。

您应该处理它,只需重定向到403"禁止"页面(该页面可能有您的消息(

相关内容

  • 没有找到相关文章

最新更新