Symfony 4中的外部服务配置

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中的导入将一些服务定义移动到单独的文件中

但当我尝试这样做时,我会得到一个错误:

无法自动连线服务“App\Domain\Test\Test”:方法“\uu construct()”的参数“$param”必须具有类型提示或显式给定值

以下是我的配置文件:

# 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}'