gpt4 book ai didi

php - 禁用 symfony 缓存/appDevDebugProjectContainer.php 怪物

转载 作者:行者123 更新时间:2023-12-04 13:53:30 28 4
gpt4 key购买 nike

我正在接手一个庞大的现有项目。现在我正在寻找一些错误。但是当到处都是 symfony 缓存时,很难理解外国代码做了什么。

Quit the server with CONTROL-C.
RUN '/usr/bin/php' '-S' '127.0.0.1:8000' '/Users/kb1/php/default/projectname/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Resources/config/router_dev.php'
ERR [Thu Dec 17 10:13:08 2015] PHP Fatal error: Uncaught exception 'Symfony\Component\DependencyInjection\Exception\InvalidArgumentException' with message 'The parameter "youtube_client_id" must be defined.' in /Users/kb1/php/default/projectname/app/cache/dev/appDevDebugProjectContainer.php:4718
ERR Stack trace:
ERR #0 /Users/kb1/php/default/projectname/src/InfluencerBundle/Service/YouTube.php(74): appDevDebugProjectContainer->getParameter('youtube_client_...')
ERR #1 /Users/kb1/php/default/projectname/src/InfluencerBundle/Service/YouTube.php(56): InfluencerBundle\Service\YouTube->setConfigParams()
ERR #2 /Users/kb1/php/default/projectname/app/cache/dev/appDevDebugProjectContainer.php(4275): InfluencerBundle\Service\YouTube->__construct(Object(appDevDebugProjectContainer))
ERR #3 /Users/kb1/php/default/projectname/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php(305): appDevDebugProjectContainer->getYoutubeServiceService()
ERR #4 /Users/kb1/php/default/projectname/app/cache/dev/appDevDebugProjectContainer.php(3937): Symfony\Component\DependencyInjection\Container->get in /Users/kb1/php/default/projectname/app/cache/dev/appDevDebugProjectContainer.php on line 4718

问题是,几乎每个方法都在这个巨大的 5000 LOC appDevDebugProjectContainer.php 容器中。

已经尝试过 Disabling the Bootstrap File and Class Caching¶虽然used autoload.php and not bootstrap.php.cache

这是我的 app_dev.php:

$loader = require_once __DIR__ . '/../app/autoload.php';
require_once __DIR__ . '/../app/AppKernel.php';

$kernel = new AppKernel('dev', true);
// $kernel->loadClassCache();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

最佳答案

容器倾倒是无法避免的。使用非转储容器会非常慢(尤其是对于大容器),这就是内核没有绕过它的选项的原因。无论如何,这会使调试更加痛苦。通过转储的容器,您可以看到错误来自 getYoutubeServiceService,即 youtube.service 服务的实例化。如果没有转储容器,您只会看到到达 ContainerBuilder 的堆栈跟踪,而没有关于此时正在实例化哪个服务的任何信息。

顺便说一下,堆栈跟踪显示错误发生在 InfluencerBundle\Service\YouTube->setConfigParams() 中,它从容器中获取了一个不存在的参数。

在一个侧节点上,在你的服务中注入(inject)参数而不是注入(inject)整个容器会更清晰(你的服务不会依赖于容器本身而是依赖于它真正的依赖)并且会让你更容易理解错误消息(因为容器可能已经告诉您您的服务在验证容器时使用了不存在的参数)

关于php - 禁用 symfony 缓存/appDevDebugProjectContainer.php 怪物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34330952/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com