2012-04-23 4 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 요청에 사용할 모듈을 알려줘야합니다. ID가 자동에 대한 고유 식별자입니다 : 당신의 application.ini 파일에서 : http://yourapplication.com/auto/:id 를 GET처럼

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

젠드는 이제 자동적으로 요청에 응답합니다. 이것은 Rails가 아니므로 Api_AutoContoller의 getAction() 메소드에 코드를 작성하여 데이터베이스를 쿼리하고 id : id 등의 auto에 대한 정보를 반환해야합니다. 추가 매개 변수를 경로, 당신은 다음 중 하나를 수행 할 수

(1) 확인합니다 아이디 PARAM 명시 : [ApplicationURL]/자동/ID/123/색/파란색 (2) 요청 본문의 다른 PARAMS을 포함, 또는 URL에 첨부 된 URL : [ApplicationURL]/auto/123? color = blue

참고 :이 모든 것을 별도의 모듈로 밀어 넣지 않아도됩니다. 애플리케이션이 작고 단순하다면 Api 용으로 별도의 모듈을 사용하는 것이 타당하지 않을 수 있습니다. 그러나 이것은 직장에서의 프로젝트 성공을 위해 사용했던 설정입니다.

관련 문제