Symfony 分析器不适用于多个内核

Symfony profiler doesnt work with multiple kernels

我使用官方文档在 symfony 应用程序 3.3 上创建了一个新内核 http://symfony.com/doc/current/configuration/multiple_kernels.html

但我创建了一个包含所有配置的新文件夹 api,并将此 if 语句添加到 app_dev 和 web 文件夹

中的应用程序

这是我的 app_dev.php 文件

    <?php

use Symfony\Component\Debug\Debug;
use Symfony\Component\HttpFoundation\Request;

require_once(__DIR__.'/../c3.php');

// If you don't want to setup permissions the proper way, just uncomment the following PHP line
// read https://symfony.com/doc/current/setup.html#checking-symfony-application-configuration-and-setup
// for more information
//umask(0000);

// This check prevents access to debug front controllers that are deployed by accident to production servers.
// Feel free to remove this, extend it, or make something more sophisticated.
if (isset($_SERVER['HTTP_CLIENT_IP'])
    || isset($_SERVER['HTTP_X_FORWARDED_FOR'])
    || !(in_array(@$_SERVER['REMOTE_ADDR'], ['127.0.0.1', '::1'], true) || PHP_SAPI === 'cli-server')
) {
    header('HTTP/1.0 403 Forbidden');
    exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}

require __DIR__.'/../vendor/autoload.php';
Debug::enable();

if (strpos($_SERVER['REQUEST_URI'], 'api') !== false) {
    $kernel = new ApiKernel('dev', true);
} else {
    $kernel = new AppKernel('dev', true);
}
if (PHP_VERSION_ID < 70000) {
    $kernel->loadClassCache();
}
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

这也工作正常,但是当我在 api 内核 symfony 调试栏上说它无法连接到分析器,当我从 api 服务器和 [=32] 中收到响应时也是如此=] 是

X-Debug-Token-Link→http://localhost:8000/_profiler/5cb1d5

但是当我打开这个探查器时,只显示来自应用程序内核的请求,没有来自 api 的请求你能帮我吗?我是否缺少某些配置?

可能,因为如果你想启用探查器,你的内核应该在 'dev' 环境中。调试应该是 运行 enabled.Try :

$kernel = new ApiKernel('dev', true);

已编辑:(你应该打开新问题而不是完全改变问题) 有2种可能性:

您没有通往探查器的路线。在这种情况下,将此添加给您 routing.yml:

_profiler:
resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml"
prefix:   /_profiler

或者,如果您无法在探查器中访问数据,则可能是您的内核中存在一些未被捕获的更改。在这种情况下,您应该遵循此 instruction 并在您的项目

中添加 data_collector

第三个选项 - 如果你重写了你的内核而不是你忘记添加 Profiler 包,尝试将它添加到你的 registerBundles() 方法中:

if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
        $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
        $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
        $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();

        if ('dev' === $this->getEnvironment()) {
            $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
            $bundles[] = new Symfony\Bundle\WebServerBundle\WebServerBundle();
        }
    }

(取自新鲜的 sf 内核)

您正在根据此条件切换内核:

if (strpos($_SERVER['REQUEST_URI'], 'api') !== false)

但是当调用探查器路由时 [http://localhost:8000/_profiler/5cb1d5] 你的 REQUEST_URI 不再符合条件,你被重定向到另一个内核(在你的情况下是应用程序)。