2012-04-23 23 views
1

私は安らかなzend-APIフレーム作業に取り組んでいます。問題は、リクエストが投稿されたときに、コントローラから処理された出力をコントローラに戻して返すために、コントローラから別のクラスにデータを取得する方法の概念がないということです。最善の方法すなわち 応答が他のクラスの他の関数によって処理された後に収集されZend restコントローラからパラメータを取得してコントローラにデータを返す

public function putAction() 
    {  
     $resource = $this->_getParam('resource'); 
     $this->view->resource = $resource; 
     //$requests = $this->getRequest(); 

     switch (true) { 
      case (strstr($resource, 'account')): 
       $response = $this -> do_post_request($requests); 
       $resource = "You are accessing account"; 
       break; 
      case (strstr($resource, 'property')): 
          $response = $this -> do_post_request($requests); 
       $resource = "You are accessing property"; 
       break; 
     case (strstr($resource, 'autos')): 
          $response = $this -> do_post_request($requests); 
       $resource = "You are accessing autos"; 
       break; 
      default: 
       $resource = "The specified resource is not available please check the api manual for available resources"; 
       break; 
     } 
     $this->view->message = $response; 
     $this->_response->ok(); 
    } 

以下putAction機能を実現します。 私が:$ response = $ this - > do_post_request($ requests);を使用していた場合、 他のクラスの構造によって、要求を処理して応答を生成する方法はありますか

答えて

3

標準的なプラクティスは、リソースごとに別のコントローラを用意することです。例えば、あなたが、あなたがそうのようなあなたのapplication.iniファイルで設定した名前空間「Api_」でAPIと呼ばれるモジュールがあるとしましょう:

autoloadernamespaces = "Api_" 

その後、あなたはあなたのAPIモジュールで、次のような3つのコントローラーを持っている必要がありますフォルダ:

class Api_AccountController extends Zend_Rest_Controller { 
    public function init() 
    { 
    } 
    public function getAction() 
    { 
    } 
    public function postAction() 
    { 
    } 
    public function putAction() 
    { 
    } 
    public function deleteAction() 
    { 
    } 
} 

その他は明らかにApi_AutoController、Api_PropertyControllerです。そして、ZendにRest要求に使うモジュールを教えなければなりません。あなたのapplication.iniファイルで:idは自動の一意の識別子です:

routes.api.type = Zend_Rest_Route 
routes.api.defaults.module = api 
routes.api.defaults.controller = api 
routes.api.api = auto,account,property 

Zendのは今自動的にGET http://yourapplication.com/auto/:id のような要求に応答します。これはRailsではありませんので、Api_AutoContollerのgetAction()メソッドにコードを記述してデータベースに問い合わせ、id:idなどのautoに関する情報を返すことはもちろんです。ルートは、次のいずれかを行うことができます

(1)のID paramは明示してください: は[ApplicationURL] /オート/ ID/123 /カラー/ブルー (2)リクエストボディ内の他のparamsを含め、 URL: [ApplicationURL]/auto/123?color = blue

注:これをすべて別のモジュールに移動する必要はありません。あなたのアプリケーションが小さくてシンプルな場合、Apiのために別のモジュールを使用するのは意味がないかもしれません。しかし、これは職場のプロジェクトで成功したセットアップです。

関連する問題