2017-11-27 9 views
0

私は、このように、コントローラ内部で呼び出されるいくつかのサービスを持つプロジェクトで働いています:

$service = $this->get('myservice'); 

しかし、私は、この他の方法で「MYSERVICE」を呼び出すことができることに気づい:もちろん

$service = $this->container->get('myservice'); 

サービスサービス宣言のDI 例を活用する:

myservice: 
     public: true 
     class: path/to/service 
     arguments: 
      - '@someEntityRepository' 

someEntityRepository: 
     class: Doctrine\ORM\EntityRepository 
     factory: ['@doctrine.orm.entity_manager', getRepository] 
     arguments: [path\to\Entity\someEntity] 

は、この呼び出しの間に違いはありますか?はいの場合は、どちらを使用しますか?どうして?

+0

あなたが始めているように見えるので、[action injection](https://symfony.com/doc/current/controller.html#fetching-services-as-controller-arguments)の使用を検討してください。 S3.3 +が必要です。全体の質問を無関係にします。 – Cerad

+0

残念ながら私はsymfony 2.8のプロジェクトで作業していますが、私はそれをアップグレードすることができません(私はそれが欲しいですが) – MatiRC

答えて

2

違いはありません。 symfonyのControllerクラスを拡張するときは、$this->get()を使用してください。その短い入力します。

$this->get('myservice');$this->container->get('myservice');のショートカットです。コントローラベースクラス(Symfony\Bundle\FrameworkBundle\Controller)で利用できます。

0

Petterが$ this- getと$ this-> container-> get()の違いについては、違いはありません。しかし、コントローラをサービスとして定義し、依存関係注入によってサービスを注入すると、良いコードを作成できます。柔軟性とパフォーマンスが向上します。

+0

現在、私はsymfony 2.8のプロジェクトで作業しています。[docs](https:// symfony .com/doc/2.8/controller/service.html)では、推奨されていません。しかし、あなたは新しいバージョンの方が正しいです – MatiRC

関連する問題