0

我有一个问题,自过去 3 天以来我一直在努力解决问题(谷歌/stackoverflow 的研究没有给出太多结果)。

我目前正在维护由另一个开发人员开发的应用程序(原来的开发人员离开了)。该应用程序在 Symfony 2.6 中。在其中,有一个通过 Voter 的概念处理 de access 的逻辑。应用程序逻辑如下: URL 包含客户(应用程序)名称。例如,让我们将客户命名为 TEST。该 url 将是:myapplication.com/Test 访问此 URL 时,有一个 EventListner(连接 onKernelRequest,31)获取请求并将客户附加到路由器上下文。这里:

if (!$event->isMasterRequest()) { return; }

$request = $event->getRequest();
$requestContext = $this->router->getContext();

if ($company = $request->attributes->get('company')) {
   $requestContext->setParameter('company', $company);
}

这基本上允许我们通过传递参数来加载我们的提供者服务

<argument type="expression">service('request_stack').getCurrentRequest().get('company')</argument>

这样做的原因是因为我们的应用程序有它自己的数据库(默认)并且每个客户都有它自己的(因为它们是由第三方 ETL 生成的,我们只能控制这些数据库的部分)。

现在,服务中的选民定义取决于这些提供者之一。我们基本上从客户的数据库中获取可能的权限列表(地图)(每个客户都会改变)。不幸的是,此刻,整个事情都崩溃了。我收到“找不到名为...的映射文件”错误。他试图从默认映射文件而不是客户端映射文件夹中获取文件。

我已经“破解”了 appdebugProjectContainer 并添加了一个 print_r()|die 来完全显示 requestStack,它看起来完全是空的。(所以请求甚至根本没有预处理)。有什么我不明白的吗?

4

0 回答 0