【发布时间】:2018-07-31 10:49:51
【问题描述】:
如何在 Symfony 3.4 中将一项服务注入到另一项服务中?
假设我有这个结构:
AppBundle
Service
ServiceOne.php
ServiceTwo.php
我的 services.yml 看起来像:
services:
...
AppBundle\Service\serviceOne:
arguments: [...]
service_one:
alias: AppBundle\Service\serviceOne
AppBundle\Service\ServiceTwo:
arguments: ["@logger", "@service_one"]
这给了我一个错误:
[2018-07-31 10:37:43] request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\ClassNotFoundException: "Attempted to load class "ServiceOne" from namespace "AppBundle\Service". Did you forget a "use" statement for another namespace?" at /symfony/var/cache/dev/ContainerKoj7t1p/getServiceOneService.php line 12 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\ClassNotFoundException(code: 0): Attempted to load class \"ServiceOne\" from namespace \"AppBundle\\Service\".\nDid you forget a \"use\" statement for another namespace? at /symfony/var/cache/dev/ContainerKoj7t1p/getServiceOneService.php:12)"} []
ServiceTwo.php:
<?php
namespace AppBundle\Service;
use Psr\Log\LoggerInterface;
class ServiceTwo {
private $logger;
private $serviceOne;
public function __construct(LoggerInterface $logger, ServiceOne $serviceOne) {
$this->logger = $logger;
$this->serviceOne = $serviceOne;
}
...
我已经尝试过这个solution 似乎它适用于旧版本的 symfony。
我也清除了缓存。
【问题讨论】:
-
services.yml(最后一行)中的单双引号是否只是一个错字?还有
serviceOne类名的小写? -
是的,它是类型。我更新了。
-
根据错误的位置,不是在ServiceTwo对象的构造里面,而是在你的getServiceOneService.php里面。
-
@EneaDume 对我来说看起来不像那个问题的重复,因为 OP 尝试完全按照那里的描述做,但仍然收到错误消息。
标签: symfony