2017-06-08 11 views
1

Symfony 3を新たにインストールし、いくつかのAPIルートをセットアップしようとしましたが、コントローラ内のコンテナにアクセスできません。Symfonyコントローラがコンテナにアクセスできない

私のコントローラはContainerAwareTraitを持つベースのSymfonyコントローラ、から延びているが、私は$this->container->get('service')をやってみたときに、私はこのエラーを取得しています:

"message": "Call to a member function get() on null", 
"class": "Component\\Debug\\Exception\\FatalThrowableError", 
"trace": [{ 
    "namespace": "", 
    "short_class": "", 
    "class": "", 
    "type": "", 
    "function": "", 
    "file": "src\\Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller.php", 
    "line": 50, 
    "args": [] 
}] 

はsymfony自身のコントローラは、コンテナを見つけることができないように、ルックスです私は行方不明のものがありますか?たとえば、あなただけ$this上の方法get()を使用して、コンテナにアクセスすることができ、コントローラで

use FOS\RestBundle\Controller\Annotations\Get; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\JsonResponse; 

class UsersController extends Controller 
{ 
    /** 
    * @Get() 
    * 
    * @return JsonResponse 
    */ 
    public function getUsersAction() 
    { 
     $users= $this->get('doctrine.orm.entity_manager')->getRepository('AppBundle:User')->findAll(); 

     return new JsonResponse($users, 200): 
    } 
} 
+0

であなたのコントローラ内で呼び出しを追加

これらは有罪線であり、コントローラをサービスとして定義しましたか?または標準のルーティングメカニズムを使用していますか? – Cerad

+0

コントローラを自分でインスタンス化しようとしていますか(たとえば '$ controller = new MyController();')? – ccKep

+0

コントローラコードをお知らせください。 –

答えて

2

は最後にすぎCERADさんのコメント@答えのおかげで見つかりました: Symfony 3のデフォルトのインストールでは、services.ymlファイルが作成され、すべてのコントローラがサービスとして登録されます。これを無効にすると、コントローラがコンテナにアクセスできるようになりました。

AppBundle\Controller\:  
     resource: '../../src/AppBundle/Controller'  
     public: true   
     tags: ['controller.service_arguments'] 
+0

DICを使ってサービスを注入する以外は同様の問題があります私のコントローラ。 DIと$ this-> containerの両方を利用できる方法はありませんか? 私はFOS User Bundleで作業しようとしていますが、コンテナにアクセスすることはできませんが、使用方法はわかりません – Xopa

0

:ここ

は、コントローラのコードである

$this->get('security.token_storage') 
+0

Downvoter、何が問題なのですか? – kRicha

+0

あなたを落としていませんでしたが、これは私がやろうとしていることです。 – ChypRiotE

+0

@ChypRiotEは 'Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller'から拡張されたコントローラです。 '$ this-> get( 'security.token_storage')'あなたのコントローラの動作中ですか? – kRicha

1

コントローラ上setContainer方法を試してみてください:

はservice.yml

AppBundle\Controller\: 
 
     resource: '../../src/YourBundle/YourController' 
 
     public: true 
 
     tags: ['controller.service_arguments'] 
 
     calls: 
 
      - [setContainer, ["@service_container"]]

関連する問題