私は個人のSatisリポジトリ内でそのエンティティとして保持されているバンドルを持っており、リポジトリは複数のアプリケーション間で共有されています。symfony 3.3サービスにリポジトリを注入する
このバンドルを使用する残りのアプリケーションは、Symfony 2.7および2.8アプリケーションです。私は新しいアプリケーションを開発しています。要件はSymfony 3.3を使用することです。
私はservices.ymlでこれを試してみましたが、symfonyの3.3アプリケーションで:
# Learn more about services, parameters and containers at
# http://symfony.com/doc/current/service_container.html
parameters:
#parameter_name: value
services:
# default configuration for services in *this* file
_defaults:
autowire: true
autoconfigure: true
# this means you cannot fetch services directly from the container via $container->get()
# if you need to do this, you can override this setting on individual services
public: false
# makes classes in src/AppBundle available to be used as services
# this creates a service per class whose id is the fully-qualified class name
CbmLtd\UvmsBundle\:
resource: '../../vendor/cbmltd/uvms-bundle/*'
exclude: '../../vendor/cbmltd/uvms-bundle/{Entity,Repository}'
UvmsApiV1Bundle\:
resource: '../../src/UvmsApiV1Bundle/*'
exclude: '../../src/UvmsApiV1Bundle/{Entity,Repository}'
上記は、次の例外を与える:
は "UvmsApiV1Bundle \サービス\ DealerServiceを" サービスをautowireすることはできません。メソッド "__construct()"の引数 "$ repository"は "CbmLtd \ UvmsBundle \ Repository \ DealerRepository"クラスを参照しますが、そのようなサービスは存在しません。別のルート名前空間からのものであるため、自動登録することはできません。
私はこのリポジトリをサービスとして明示的に宣言する必要があると思います。 Symfony 3.3のドキュメントでリポジトリをサービスとして宣言することについて何も見つけられません。また、2.8の構文も機能しません。
は、私は私のservices.ymlにこれを追加しました:services:
...
CbmLtd\UvmsBundle\DealerRepository:
class: CbmLtd\UvmsBundle\Entity\DealerRepository
factory_service: doctrine.orm.entity_manager
factory_method: getRepository
arguments:
- CbmLtd\UvmsBundle\Entity\Dealer
しかし、私はまだ、この例外を取得:
autowireできないサービス "UvmsApiV1Bundle \サービス\ DealerService":引数 "$リポジトリ" のメソッド "__construct()"は "CbmLtd \ UvmsBundle \ Repository \ DealerRepository"クラスを参照していますが、そのようなサービスは存在しません。別のルート名前空間からのものであるため、自動登録することはできません。
これは複数のアプリケーションで使用されているため、CbmLtd \ UvmsBundleに変更を加えることはできません。どんな助けもありがとう。私は文字通りこれに数時間を費やしました。とてもイライラしています。
を得た:car_base.appを "サービスを提供するためにクラスを追加してください"。コンパイル時のチェックに基づいてメソッド呼び出しを追加する必要があるかもしれないので、それが工場によって構築されたとしても、 "partnership_repository" – itnelo