0

外部クライアントにサービスを提供し、json データを返す API というモジュールを作成しました。ユーザーモデルの json 表現を返すhttp://example.com/api/user/get-by-id/1のようなエンドポイントがあります。ここで、コードの重複を避けるために、Web サイトで同じ API を使用したいと考えています。

したがって、私の Web サイトでユーザー情報を取得したい場合は、API の get-by-id メソッド (API モジュール、ユーザー コントローラー、getById アクション) を呼び出す必要があります。

もちろん、これを http 経由で行いたくありません。だから私が求めているのは、別のコントローラーのアクションを呼び出し、応答をキャプチャし、元のアクションを続行する方法があるかということです。

<?php 
Class IndexController {
       public function indexAction()
       {
            $user = $this->apiCall(array('userid' => 1)); // This is what I am trying to do.
       }
}
4

1 に答える 1

0

Zend のコントローラは、これを行うようには設計されていません。

次のようなことを試すことができます:

    $request = new Zend_Controller_Request_Simple();
    $request->setParam('id', 55); //param to you API
    $ApiController = new Api_ApiController($request, new Zend_Controller_Response_Http());
    $ApiController->apiAction(); //your API Action
    $yourResultHere = $ApiController->view->result; //get result from View (this is data send to view, not rendered result)

しかし、これは良い Zend プログラミングの実践ではありません ;)

他のオプションは、 Controller を作成し、ApiControllerの代わりにから拡張することZend_Controller_Actionです。そのため、次のような関数を使用するだけ$this->apiAction()で、現在のビューで結果を取得できます。

しかし、最善の方法は、API のコードをモデル レイヤーに移動し、データを ApiController (JSON に変換する) と現在のコントローラー (必要に応じて変換できる場所) で配列またはオブジェクトとして返すクラスを使用することです。

于 2013-08-02T14:55:06.393 に答える