【问题标题】:symfony4 migrate autowire to true - get error messagesymfony4 将 autowire 迁移到 true - 获取错误消息
【发布时间】:2017-12-29 09:05:15
【问题描述】:

我正在从 symofony 2.7 迁移到 symfony 4.0。成功地我迁移了一个包。现在我正在迁移第二个捆绑包,并且出现错误消息。我完全没有得到 symfony 4.0 想要从我这里得到的东西。

如果我打开autowire: true,就会出现此错误消息。

Cannot autowire service "App\Kernel": argument "$environment" of method "Symfony\Component\HttpKernel\Kernel::__construct()" must have a type-hint or be given a value explicitly.

有人可以帮帮我吗?

如果我将其关闭,则不会出现任何消​​息。

更新

我只在 bundles.php 中注册了我的包

App\Backend\AccountBundle\BackendAccountBundle::class => ['all' => true],

【问题讨论】:

  • 你能粘贴你的配置文件吗?目前它会尝试自动装配您的内核。
  • 默认来自 symfony4。但我的问题有更新
  • 我对配置文件更感兴趣,例如config/services.yaml 在这里您可以定义有关自动装配的所有内容。

标签: symfony symfony4


【解决方案1】:

通常,内核作为所谓的 synthetic 服务添加到服务容器中,这意味着它不是由 DI 容器从配置中生成的。而是设置 id,然后将先前配置的服务添加到容器中。您的包的容器想要在这里创建一个新内核似乎很奇怪。所以我会检查你想在哪里以及如何访问任何捆绑服务中的内核,以及你是否真的想传入内核而不是其他东西。如果您这样做,您可能需要查看合成服务的服务容器文档。

关于错误本身。当您的服务需要像内核这样的参数时,Symfony 的自动装配通常会失败:

public function __construct(string $environment, bool $debug) {...}

在这些情况下,您必须在 services.yaml 中定义一个与参数名称匹配的参数:

# config/services.yaml
parameters:
    environment: prod
    debug: false

或者你必须告诉配置你想在那些地方有哪些参数。

App\Kernel:
    $environment: prod
    $debug: false

这将告诉自动装配只有名为 environmentdebug 的 2 个参数应该被您提供的值覆盖,但其余的通过自动装配完成。这样您就可以跳过定义中的arguments: 部分,也可以跳过所有您知道通过自动装配正确设置的参数。

例如,如果您有这样的服务:

class MyService {
    public function __construct(OtherServce $service, string $someParameter) {}
}

# config/services.yaml

services:
    _defaults:
        autowiring: true

    MyService:
        $someParameter: 'someValue'

这和显式写法一样:

services:
    MyService:
        class: MyService
        arguments:
            - '@OtherServce'
            - 'someValue'

【讨论】:

    猜你喜欢
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多