首页 文章

Symfony 4中的外部服务配置

提问于
浏览
2

我正在尝试使用services.yaml中的导入将一些服务定义移动到单独的文件中 . Here you can find this in symfony doc.

但是当我试图这样做时,我收到一个错误:

无法自动装配服务“App \ Domain \ Test \ Test”:方法“__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']

# test.yaml
parameters:
    param: 'some param'

services:
    App\Domain\Test\Test:
        public: true
        autowire: true
        arguments:
            $param: '%param%'

这是服务:

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中,这很有效 . 有人知道我做错了什么吗?

1 回答

  • 2

    问题是您的第一个文件尝试加载作为服务的服务,并且无法自动填充参数 string $param .

    一个好的解决方法可能是排除您的服务:

    services:
        App\:
            resource: '../src/*'
            exclude: '../src/{Entity,Migrations,Tests,Kernel.php,Domain/Test.php}'
    

    另一种解决方案是简单地将此定义放在 services.yaml 文件中 .

    您也可以考虑加载 App\Something\: 而不是完整的命名空间,但如果您尝试在跨命名空间定义中进行自动装配,则会有缺点 . (某些功能可能无法按预期工作)

相关问题