Symfony服务声明命名空间


Symfony service declaration namespace

我对symfony2有奇怪的问题。在服务。我声明分页服务:

site.paginate_service:
class: "Smestaj'SiteBundle'Services'PaginationService"
arguments:
  - "@service_container"

服务是这样的:

namespace Smestaj'SiteBundle'Services;
use Symfony'Component'DependencyInjection'ContainerInterface;
class PaginationService{
protected $cn;
protected $numberOfData;
public function __construct(ContainerInterface $container)
{
    $this->cn = $container;
    $this->numberOfData = $container->getParameter("limit")['adsPerPage'];
}

问题是当我在服务中调用这个服务时。作为依赖项注入到另一个服务中

site.ads_service:
class: "Smestaj'SiteBundle'Services'AdsService"
arguments:
  - "@doctrine.orm.entity_manager"
  - "@service_container"
calls:
  - [setPaginate, ["@site.paginate_service"]]

然后我得到这个错误信息:

试图从命名空间"Smestaj'SiteBundle"加载类"Services
aginationService"。您是否忘记了另一个名称空间的"use"语句?

因此,从这条消息中可以清楚地看出symfony试图调用"ServicesaginationService"类。我的类有Smestaj'SiteBundle'Services'PaginationService。Symfony,以某种方式合并Services和PaginationService名称,并从名称中删除"P"。

如果我改变类名AaaService然后一切工作正常。

当您在service.yml的类名中使用双引号时,您必须通过添加另一个'来转义':

class: "Smestaj''SiteBundle''Services''PaginationService"

但是避免问题的最好方法是去掉引号,因为路径将被YML解析器正确地解释为字符串:

class: Smestaj'SiteBundle'Services'PaginationService