2016-04-09 8 views
0

私のサービスからヘルパーに電話したいと思います。サービスからヘルパーに電話する

$notificationService = $this->get('Notification'); 

symfonyは魔法ではないクラス

+0

どこから呼び出すのですか?あなたはあなたのクラスを共有できますか? – Federkun

+0

私は、 'use App \ Bundle \ Services \ Notification;でサービスを宣言し、' $ notificationService = new Notification();をインスタンス化しました。 – Paul

答えて

3

の "取得" という名前の未定義のメソッドを呼び出そうとしました。 Symfonyは単なるPHPです。それはSymfonyを扱う際に覚えておくべき最も重要なことです。

したがって、クラスにget()メソッドがない場合は、メソッドを呼び出すことはできません。あなたのコントローラでは、FrameworkBundleのベースControllerから拡張します。このクラスにはこのようなメソッドが含まれているので、コントローラではこのメソッドを呼び出すことができます。

今度は、新しいサービスでNotificationサービスを使用したいと考えています。それをコンテナから取得する代わりに、コンテナがそのコンテナを作成するときにコンテナにそれを注入させます。

# app/config/services.yml 
services: 
    app.your_service: 
     class: AppBundle\Some\Class 
     arguments: ['@Notification'] # <<-- this tells to inject the service 

をそしてあなたのクラスでこれを適応:あなたは、いくつかのサービスの設定でこれを行う

class SomeClass 
{ 
    private $nofication; 

    public function __construct(NotificationInterface $notification) 
    { 
     $this->notification = $notification; 
    } 
} 

は、このことについて説明するのはもっとたくさんあります。 http://symfony.com/doc/current/book/service_container

関連する問題