symfony4将autowire迁移为true - 获取错误消息

cra*_*ter 0 symfony symfony4

我正在从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.
Run Code Online (Sandbox Code Playgroud)

有人能帮助我吗?

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

更新

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

App\Backend\AccountBundle\BackendAccountBundle::class => ['all' => true],
Run Code Online (Sandbox Code Playgroud)

dbr*_*ann 6

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

至于错误本身.当您拥有需要像内核这样的参数的服务时,Symfony的自动装配经常会失败:

public function __construct(string $environment, bool $debug) {...}
Run Code Online (Sandbox Code Playgroud)

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

# config/services.yaml
parameters:
    environment: prod
    debug: false
Run Code Online (Sandbox Code Playgroud)

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

App\Kernel:
    $environment: prod
    $debug: false
Run Code Online (Sandbox Code Playgroud)

这将告诉自动装配,只有2个参数命名environment并且debug应该用您提供的值覆盖,但其余参数通过自动装配完成.这样您就可以跳过arguments:定义的一部分,也可以跳过通过自动装配正确设置的所有参数.

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

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

# config/services.yaml

services:
    _defaults:
        autowiring: true

    MyService:
        $someParameter: 'someValue'
Run Code Online (Sandbox Code Playgroud)

这与明确写作相同:

services:
    MyService:
        class: MyService
        arguments:
            - '@OtherServce'
            - 'someValue'
Run Code Online (Sandbox Code Playgroud)