0

Web ベースの API からユーザー データを取得しています。データの取得を避けたいので、そのデータが必要ない場合は HTTP リクエストを作成します。コンストラクターに を取り、それを単純に格納するUserクラスを作成することを考えていました。ある時点で getter メソッドが呼び出されると、呼び出しが行われ、API からデータがフェッチされます。$userIDgetUserName()

ここで、すべての API 作業を行うサービスを作成しました。APIWrapperこのサービスをUserエンティティ クラスに接続するにはどうすればよいですか? エンティティ クラスのサービス コンテナーに依存するのは悪いスタイルだと考えられていることを読みました。これが一般的に推奨される解決策である場合、Userクラスをサービス コンテナーに依存させてサービスを呼び出し、参照によってオブジェクトAPIWrapperを渡しUser、API から取得したすべてのものをサービスに入力させるだけです。Userしかし、クラスをサービス コンテナーに依存させずにこれを行うにはどうすればよいでしょうか。

私は次のようにそれを使用できることを望んでいました:

$user1 = new User(1234);
$user2 = new User(2345);
echo $user2->getName();

API から user2 の名前を取得するだけで、user1 には何もしません。そうすれば、キャッシュも簡単に実装できるので、API を照会する必要さえありません。

そう。これを行うための最良の方法と考えられるものは何ですか?

4

1 に答える 1

0

ユーザーがサードパーティのサービスを認証して最初に登録している場合は、サインアップ時にその情報を正しく取得する必要があります。基本的なアカウント情報を提供する必要のないユーザーが何人いると予想されますか?

エンティティの目的はオブジェクトとそのデータを含めることだけであるため、サービスをエンティティに注入することは実際には悪い習慣です。UserProviderFOSUserBundle と FOSFacebookBundle を統合するためのさまざまなガイドライン セットで説明されているように、既存のユーザーのユーザー データを取得するには を使用する必要があります。

さて、これら 2 つのバンドルを統合するために Google 検索を行うか、周囲に尋ねると、15 ドルの有料スクリーンキャストが表示されます。プロジェクトのフレームワークとして Symfony に真剣に取り組んでいるなら、Symfony を構築している人々がどのように考えているかを見るのは、お金を払う価値があるかもしれません。自分の髪をいくらか引き抜いても構わないと思っている場合は、検索結果をさらに掘り下げて、https ://gist.github.com/iBet7o/5215066 のようなリソースを参照してください。

正確な実装は、使用しているバンドルによって異なりますが、一般的に、コードは次のようになります。

function getName() {
    if($this->name == '') {
        return $this->getSignupProvider()->getUserinfo(); // or maybe just getProvider()
    }
    return $this->name;
}
于 2013-03-24T03:08:36.330 に答える