2016-10-10 26 views
0

私はZF2を初めて使用しています。サービスとServiceManagerを勉強しています。私はAPI(http://127.0.0.1/api/login)を介して "認証"を行いたいと同時に、DBともやり取りする必要があります。私はログイン後にAPIからいくつかのデータを得て、別のデータをDBから取得します。zf2 LoginServiceInterfaceとモデルとのやりとり

私は

$テスト=の$ this - > loginService->ログイン($ユーザ名、$パスワード)でログイン方法を持っているLoginControllerを持っています。

私は別のログイン方法でログインサービスを作成しました:

$ apiService =新しいApiService();

$ userApi = $ apiService-> postRequest( 'login /'、['email' => $ username、 'password' => $ password]);

私は別のサービス(ApiService)に入れました。

最初の質問は、私がApiServiceに依存しないようにするにはどうすればよいですか?私は別のものに依存するサービスを持っています 2番目の質問は、このLoginServiceのdb​​データとAPIデータをどのように混ぜるのですか?ファクトリにモデルを挿入し、それをサービスに呼び出すのがベストプラクティスですか?

私の頭の中の流れは、 LoginController - > LoginService - > API呼び出し - > LoginService - > DB - > LoginService - > LoginController - >ビューなどでなければなりません。

APIによるログインはベストプラクティスではないことがわかっています。私は認証フレームワークでこれをやっていないためですが、現時点ではエンドポイントを呼び出して完全なJSONを取得するのは簡単です。

ありがとうございました。

答えて

0

新しいインターフェイスを実装する任意の数のサービス(おそらくLoginServiceInterface)を作成することで、ログイン機能をカプセル化できます。このインタフェースは、認証に必要な実際のメソッドを定義し、具象クラスはそれを実装します。

インターフェイスは次のようになります。

interface LoginServiceInteface 
{ 
    public function login($username, $password);  
} 

具体的な実装では、ログインメソッドを定義できます。

class ApiLoginService implements LoginServiceInterface 
{ 
    protected $dbAdapter; 
    protected $apiService; 

    public function __construct(ApiServiceInterface $apiService, Adapter $dbAdapter) 
    { 
     $this->dbAdapter = $dbAdapter; 
     $this->apiService = $apiService; 
    } 

    public function login($username, $password) 
    { 
     // do some queries. 
     //$this->dbAdapter->query('')... 

     $response = $this->apiService->makeSomeCallToApi([$username, $password]); 

     if ($response) { 
      return true; 
     } 
     return false; 
    } 
} 

また、クラスをサービスマネージャーに登録し、依存関係を挿入するサービスファクトリを作成する必要があります。

関連する問題