Symfony 4中的外部服务配置
我正在尝试使用services.yaml中的导入将一些服务定义移动到单独的文件中 但当我尝试这样做时,我会得到一个错误: 无法自动连线服务“App\Domain\Test\Test”:方法“\uu construct()”的参数“$param”必须具有类型提示或显式给定值 以下是我的配置文件:Symfony 4中的外部服务配置,symfony,symfony4,Symfony,Symfony4,我正在尝试使用services.yaml中的导入将一些服务定义移动到单独的文件中 但当我尝试这样做时,我会得到一个错误: 无法自动连线服务“App\Domain\Test\Test”:方法“\uu construct()”的参数“$param”必须具有类型提示或显式给定值 以下是我的配置文件: # services.yaml imports: - { resource: services/test.yaml } services: _defaults: auto
# services.yaml
imports:
- { resource: services/test.yaml }
services:
_defaults:
autowire: true
autoconfigure: true
public: false
App\:
resource: '../src/*'
exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'
App\Controller\:
resource: '../src/Controller'
tags: ['controller.service_arguments']
及
服务内容如下:
namespace App\Domain\Test;
class Test
{
private $mailer;
private $param;
public function __construct(\Swift_Mailer $mailer, string $param)
{
$this->mailer = $mailer;
$this->param = $param;
}
}
如果我将参数和服务移动到services.yaml中,这将很好地工作。
有人知道我做错了什么吗?问题是,您的第一个文件试图作为服务加载您的服务,但无法自动填充参数
字符串$param
一个好的解决方案可能是排除您的服务:
services:
App\:
resource: '../src/*'
exclude: '../src/{Entity,Migrations,Tests,Kernel.php,Domain/Test.php}'
另一种解决方案是简单地将此定义放入services.yaml
文件中
您也可以考虑加载<代码> App\Objs:< /Cord>,而不是完整的命名空间,但是如果您试图在交叉命名空间定义中自动进行,那么这将有缺陷。(某些功能可能无法按预期工作)
需要在所有服务文件中重复“默认设置”部分。此外,在测试时会自动加载config/services_test.yaml。services:
App\:
resource: '../src/*'
exclude: '../src/{Entity,Migrations,Tests,Kernel.php,Domain/Test.php}'