您好,我正在创建服务。这是代码,
namespace App\Service;
use Symfony\Component\DependencyInjection\ContainerInterface;
use App\Entity\CarAd;
class MatchCarAdService {
protected $mailer;
protected $templating;
public function __construct(ContainerInterface $container, \Swift_Mailer $mailer, $templating) {
$this->container = $container;
$this->mailer = $mailer;
$this->templating = $templating;
}
public function sendMail() {
$message = (new \Swift_Message('Hello Email'))
->setFrom('vimuths@yahoo.com')
->setTo('vimuths@yahoo.com')
->setBody(
$this->templating->render(
// templates/emails/matching-cars.html.html.twig
'emails/matching-cars.html.html.twig', []
), 'text/html'
);
$this->mailer->send($message);
这是services.yml
MatchCarAdService:
class: App\Service\MatchCarAdService
arguments: ['@mailer','@templating']
但是我遇到这个错误,
无法解析参数$ matchService “ App \ Controller \ Api \ SearchController()”:无法自动装配服务 “ App \ Service \ MatchCarAdService”:方法的参数“ $ templating” “ __construct()”没有类型提示,您应该配置其值 明确地。
答案 0 :(得分:2)
现在,您的构造函数具有3个参数,但是在参数中您仅放置了2个。
因此,有两种可能的解决方案:
配置您的Yaml
MatchCarAdService:
class: App\Service\MatchCarAdService
arguments: ['@container', '@mailer','@templating']
使用带有类型提示的自动接线 在那里,这取决于您的Symfony版本,但是将构造函数更改为
public function __construct(ContainerInterface $container, \Swift_Mailer $mailer, Symfony\Component\Templating\EngineInterface; $teplating) {
$this->container = $container;
$this->mailer = $mailer;
$this->templating = $templating;
}
您可能必须composer require symfony/templating
才能获得Symfony\Bundle\FrameworkBundle\Templating\EngineInterface
服务。
还必须在framework
下添加以下配置:
templating:
enabled: true
engines: ['twig']
答案 1 :(得分:1)
@M回答。 Kebza解决了您的情况。但是,您可以使其变得更加简单和防错。只需使用Symfony 3.3+功能即可。
services:
_defaults:
autowire: true
App\Service\MatchCarAdService: ~
App\Service\CleaningService: ~
App\Service\RentingService: ~
services:
_defaults:
autowire: true
App\:
resource: ../src
这会按照PSR-4约定从App\
目录的../src
名称空间中加载所有服务。
您可以在How to refactor to new Dependency Injection features in Symfony 3.3帖子中看到更多示例。