2016-10-03 171 views
1

我對symfony2有個奇怪的問題。 在service.yml我宣佈分頁服務:Symfony服務聲明命名空間

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']; 
} 

問題是,當我稱之爲service.yml這種服務到另一個服務爲dependacy注射

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

然後我得到這個錯誤信息:

試圖從命名空間「Smestaj \ SiteBundle」加載類「ServicesaginationService」。 你忘記了另一個命名空間的「使用」語句嗎?

所以,從這個消息可以清楚看出,symfony試圖調用類「ServicesaginationService」。我的班級有Smestaj \ SiteBundle \ Services \ PaginationService。 Symfony以某種方式合併服務和PaginationService名稱,並從名稱中刪除「P」。

如果我將類名更改爲AaaService,那麼一切正常。

+0

嘗試從'class'值中刪除引號。 –

+0

將service_container注入到服務本身是一個糟糕的主意。你應該只注入依賴的服務,參數等,但不是服務容器 – rokas

回答

1

當您在service.yml使用類名雙引號,你必須通過添加另一個\逃離\

class: "Smestaj\\SiteBundle\\Services\\PaginationService" 

但爲了避免問題的最好辦法是刪除引號,因爲路徑被YML解析器理解爲字符串:

class: Smestaj\SiteBundle\Services\PaginationService 
+0

謝謝你的迴應。你的答案解決了我的問題 –