Symfony2 と FOSRestBundle で構築された REST API があります。これはすべて正常に機能しますが、あるサービスでは、別のサービスのデータを別のバンドルに結合します。これは単純なように見えましたが、そうではありません。
新しいリクエストオブジェクトを作成し、パラメータを追加しています。そこから他のサービスへのリクエストを開始します。サービスはリクエストを正常に受け取りますが、 $this->get を使用しようとすると、古き良きものが得られますCall to a member function get() on a non-object in ...
私はサービスコンテナが欠けていることを知っています(ヒットを最初のバンドルと呼んだときに利用可能であるが、2番目のバンドルでは利用できない理由を完全には理解していません)。$this->get
services.yml で定義されたカスタム サービスをヒットするために使用できますか? (を使用してサービスコンテナを簡単に渡すことができますarguments:
container: "@service_container"
)
FOSRestBundle はサービスとして呼び出さないため、このバンドルをサービスとして設定しても機能しません。
要するに、bundle1の内部でbundle2からデータを取得できるようにしたい
namespace MyVendor\Bundle1\Controller
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use MyVendor\Bundle2\Controller\Bundle2ClassName;
class Bundle1 {
//if i wanted to do this here it would work fine:
// $this->get('my.service.defined.in.service.yml');
$bundle2 = new Bundle2ClassName();
$returned_data = $bundle2->myFunction();
}
次に、bundle2 の myFunction 内でまったく同じサービス関数を呼び出そうとすると、恐ろしい get エラーが発生します。FOSRest ルートを介して bundle2 を直接呼び出すと、明らかにその問題は発生しません。
namespace MyVendor\Bundle2\Controller
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
class Bundle2 {
//this does not work
$this->get('my.service.defined.in.service.yml');
//do some stuff then return response
return($response);
}
私はすべてのサービス コンテナ ドキュメントを何度も読んだので、それらにリンクする場合は、この内容がどのように処理されるかを説明している正確なセクションを指摘していただければ幸いです。これは、数か月前に Symfony を使い始めて以来、完全には理解できなかった唯一の問題です。
PS十分なポイントを持っている人は、FOSRestBundleをタグとして追加できますか?
ありがとう!