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 不再符合条件,你被重定向到另一个内核(在你的情况下是应用程序)。
我使用官方文档在 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 不再符合条件,你被重定向到另一个内核(在你的情况下是应用程序)。