2

我开始将我的应用程序迁移到 symfony4,但在我的一个第三方捆绑包(tbbcmoneybundle )中有以下弃用通知。我想知道为了提出 PR 需要进行哪些更改

目前由于这些错误,构建失败(完整报告在这里

The "doctrine.database_create_command" service is private, getting it from the container is deprecated since Symfony 3.2 and will fail in 4.0. You should either make the service public, or stop using the container directly and use dependency injection instead: 25x
    12x in ConfigTest::setUp from Tbbc\MoneyBundle\Tests\Config
    6x in ConsoleTest::setUp from Tbbc\MoneyBundle\Tests\Console
    3x in ConsoleTest::testRunRatioList from Tbbc\MoneyBundle\Tests\Console
    2x in ConsoleTest::testRunRatioFetch from Tbbc\MoneyBundle\Tests\Console
    1x in ConfigTest::testHistoryOfFetchedRatio from Tbbc\MoneyBundle\Tests\Config
    1x in ConsoleTest::testRunSaveRatio from Tbbc\MoneyBundle\Tests\Console

我猜它与此代码有关

    $this->runCommand($this->client,'doctrine:database:create');
    $this->runCommand($this->client,'doctrine:schema:update --force');

但是我看不到如何解决这个问题,而且谷歌似乎对此没有帮助。

4

1 回答 1

1

这个问题看起来像是来自 Symfony 4 中容器意识的丧失(如果这是一个有效的短语),它始于 Symfony 3.4。这篇博客讨论了在 3.4 中限制容器注入以及它将如何在 4.0 中消失

看起来好像有人打开了 PR 来升级到 Symfony 4,但这是失败的。(看起来你也在努力帮助它。)

根据这个失败的 Travis 集成测试,扩展“ContainerAwareCommand”的命令是失败的根源。

这是有道理的。ContainerAwareCommand 尝试注入 Container,它private在 Symfony 4 中设置为(自 3.4 起已弃用),如上面的博客文章中所述。一个修复,如果我正确阅读了您的问题,我认为您想在对 TBBC 的 PR 中修复此问题,似乎是从这些命令类中删除 ContainerAwareCommand 的扩展并注入必要的服务。请参阅有关命令的新 Symfony 4 文档(并注意 ContainerAware 不再是 2.8-ish 中的选项。)

简而言之,摆脱对 ContainerAwareCommand 的扩展并注入这些命令使用的服务。(可能需要做一些额外的配置来确保服务是公开的。)

于 2018-01-05T15:29:12.487 回答