Php Symfony 5中参数注入的自动接线问题

Php Symfony 5中参数注入的自动接线问题,php,symfony,symfony4,Php,Symfony,Symfony4,我在尝试从Symfony 5中的控制器检索管理器时遇到问题 我在src/Manager/MailerManager.php中找到了这个MailerManager: <?php namespace App\Manager; use App\Client\MailjetClient; class MailerManager { private $mailjetClient; function __construct(MailjetClient $mailjetC

我在尝试从Symfony 5中的控制器检索管理器时遇到问题

我在
src/Manager/MailerManager.php中找到了这个MailerManager:

<?php
namespace App\Manager;

use App\Client\MailjetClient;

class MailerManager {
    private $mailjetClient;     

    function __construct(MailjetClient $mailjetClient) {
        $this->setMailjetClient($mailjetClient);        
    }

    function send($data) {

    }

    function getMailjetClient() {
        return $this->mailjetClient;
    }

    private function setMailjetClient($mailjetClient) {
        $this->mailjetClient = $mailjetClient;
    }

}
这只是通过composer安装的mailjet sdk的包装,根据环境的不同,需要为其提供不同的
$apikey
$apisecret
,以便我通过
services.yaml
文件使用参数,其中,我还为
MailjetClient
MailerManager
启用了自动连接和服务定义:

parameters:
    rabbitmq:
        host: '%env(RABBITMQ_HOST)%'
        port: '%env(RABBITMQ_PORT)%'
        user: '%env(RABBITMQ_USER)%'
        pwd: '%env(RABBITMQ_PWD)%'
    mailjet:
        apikey: '%env(MAILJET_APIKEY)%'
        apisecret: '%env(MAILJET_APISECRET)%'

services:
    _defaults:
        autowire: true
        autoconfigure: true
    App\:
        resource: '../src/*'
        exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'

    App\Controller\:
        resource: '../src/Controller'
        tags: ['controller.service_arguments']

    App\Client\MailjetClient\:
        resource: '../src/Client/MailjetClient.php'
        arguments:
            $apikey: '%mailjet.host%'
            $apisecret: '%mailjet.port%'        

    App\Manager\MailerManager\:
        resource: '../src/Manager/MailerManager.php'        
        arguments:
            $mailjetClient: '@client.mailjet'            
我遇到的问题是,我遇到了以下错误:
无法自动连线服务“App\Client\MailjetClient”:方法“\uu construct()”的参数“$apikey”的类型提示为“string”,您应该明确地配置它的值。
当我尝试在
src/Controller/MailerController.php
控制器中插入
MailManager
时:

<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use App\Manager\MailerManager;

class MailerController extends AbstractController
{
    /**
     * @Route("/compose", name="compose")
     */
    public function compose(MailerManager $mailerManager) 
    {        
        dump($mailerManager);die();
        }
    }       
}

我在
services.yml
方面遭遇了一场彻底的灾难,多亏了u_mulder和Tejas Gosai的暗示,我终于可以将这一切付诸实施了。我在注入的参数上有一些类型错误,不需要
MailManager.php
特定声明,我的客户机名称空间不应该以
\
ad u\u mulder建议的结尾

最后,通过这个
services.yml
它可以工作:

parameters:
    rabbitmq.host: '%env(RABBITMQ_HOST)%'
    rabbitmq.port: '%env(RABBITMQ_PORT)%'
    rabbitmq.user: '%env(RABBITMQ_USER)%'
    rabbitmq.pwd: '%env(RABBITMQ_PWD)%'
    mailjet.apikey: '%env(MAILJET_APIKEY)%'
    mailjet.apisecret: '%env(MAILJET_APISECRET)%'
services:
    _defaults:
        autowire: true      # Automatically injects dependencies in your services.
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
    App\:
        resource: '../src/*'
        exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'
    App\Controller\:
        resource: '../src/Controller'
        tags: ['controller.service_arguments']
    App\Client\MailjetClient:        
        arguments:
            $apikey: '%mailjet.apikey%'
            $apisecret: '%mailjet.apisecret%'

    App\Client\RabbitClient:        
        arguments: ['%rabbitmq.host%','%rabbitmq.port%','%rabbitmq.user%','%rabbitmq.pwd%']                                


为什么您的服务定义以
\`,例如
App\Manager\MailerManager\`结尾?因为App \:resource:“../src/*”exclude:“../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}”加载除excludes之外的所有目录。您需要排除此列表中的MailJet服务。您必须绑定参数,以避免像此处那样手动声明服务。退房
parameters:
    rabbitmq.host: '%env(RABBITMQ_HOST)%'
    rabbitmq.port: '%env(RABBITMQ_PORT)%'
    rabbitmq.user: '%env(RABBITMQ_USER)%'
    rabbitmq.pwd: '%env(RABBITMQ_PWD)%'
    mailjet.apikey: '%env(MAILJET_APIKEY)%'
    mailjet.apisecret: '%env(MAILJET_APISECRET)%'
services:
    _defaults:
        autowire: true      # Automatically injects dependencies in your services.
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
    App\:
        resource: '../src/*'
        exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'
    App\Controller\:
        resource: '../src/Controller'
        tags: ['controller.service_arguments']
    App\Client\MailjetClient:        
        arguments:
            $apikey: '%mailjet.apikey%'
            $apisecret: '%mailjet.apisecret%'

    App\Client\RabbitClient:        
        arguments: ['%rabbitmq.host%','%rabbitmq.port%','%rabbitmq.user%','%rabbitmq.pwd%']