symfony migrate autowire to true - 得到错误信息
symfony4 migrate autowire to true - get error message
我正在从 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],
通常,内核作为所谓的合成服务添加到服务容器中,这意味着它不是由 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
这将告诉自动装配只有名为 environment
和 debug
的 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'
我正在从 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],
通常,内核作为所谓的合成服务添加到服务容器中,这意味着它不是由 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
这将告诉自动装配只有名为 environment
和 debug
的 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'