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

标签 php symfony caching

我正在接手一个庞大的现有项目。现在我正在寻找一些错误。 但是当到处都是 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/

相关文章:

javascript - 使用原型(prototype)缓存 AJAX 查询结果

php - php:如何获取数组的倒数第二个元素?

php - 如何将此 MySQL 查询转换为等效的 Laravel 5.4 Elequent/查询生成器查询?

php - Symfony2 和 MVC - 扩展 Controller 是一个好的实践吗?

php - 我可以在表单生成器中使用查询来获取 symfony 表单中的过滤集合吗

caching - 如何使缓存保持最新

php - 将秒转换为天、小时、分钟和秒

javascript - 如何使用 MYSQL 信息让我的报价在 PHP 中正确显示并将它们放入 onclick 事件中?

symfony - Symfony2 测试中的数据库清理

java - Redis Cluster中如何使用Redisson上传字节数组?