2016-10-03 8 views
1

symfony2に奇妙な問題があります。symfonyサービス宣言ネームスペース

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

サービスは、次のようになります:私はdependacy注入

site.ads_service: 
class: "Smestaj\SiteBundle\Services\AdsService" 
arguments: 
    - "@doctrine.orm.entity_manager" 
    - "@service_container" 
calls: 
    - [setPaginate, ["@site.paginate_service"]] 
として別のサービスにservice.ymlでこのサービスを呼び出すとき

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で は、Iページネーションサービスを宣言しました

このエラーメッセージが表示されます。

名前空間 "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" 

しかし、問題を回避する最善の方法は、パスが意志として、引用符を削除することです

class: Smestaj\SiteBundle\Services\PaginationService 
+0

ありがとうございます。あなたの答えは私の問題を解決した –

関連する問題