2010-02-01 4 views
0

내 구체적인 문제는 다음과 같습니다. 나는 당신이 사용할 방법을 선택할 수있는 API 레벨을 만들고 싶다. 예를 들어 :Zend Framework - 모듈이 아닌 계층 구조를 만드는 방법은 무엇입니까?

test.com/api/rest

test.com/api/xmlprc

현재 나는 모듈 디렉토리에 대한 API 매핑을 가지고있다. 그런 다음 나머지 경로를 설정하는 경로를 설정합니다. test.com/api는 휴식 경로이지만, 나는 test.com/api/rest가되도록하고 싶습니다. 그러면 나중에 다른 사람들을 추가 할 수 있습니다. Bootstrap.php에서

:

 $front = Zend_Controller_Front::getInstance(); 
    $router = $front->getRouter(); 
    $route = new Zend_Controller_Router_Route(
'api/:module/:controller/:id/*', 
array('module' =>'default') 

);

$ router-> addRoute ('api', $ route);

$ restRoute = new Zend_Rest_Route ($ front, array(), array ( 'rest' )); $ router-> addRoute ('rest', $ restRoute);

return $ router; application.ini에서

:

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 

가 나는 경로를 포함 할 것이다 알지만, 가끔 따라하기 조금 힘들 젠드 프레임 워크 문서를 찾을 수 있습니다.

내가 test.com/rest/controller/로 갈 때 어떻게해야합니까?하지만 test.com/api/rest/로 이동하면 내 모듈이 API이고 컨트롤러가 나머지라고 알려줍니다.

답변

0

실제로 api/: controller/: action.json 또는 api/: controller/: action.xml (API를 많이 보았습니다 (예 : Twitter))과 같은 작업을 수행하려고 할 수 있습니다.

은 같은 것을 할 수있는이를 달성하기

$front = Zend_Controller_Front::getInstance(); 
$router = $front->getRouter(); // returns a rewrite router by default 
$router->addRoute(
      'json_request', 
      new Zend_Controller_Router_Route_Regex(
              '([^-]*)/([^-]*)/([^-]*)\.json', 
              array(
               'controller' => 'index', 
               'action'  => 'index', 
               'request_type' => 'json'), 
              array(
               1 => 'module', 
               2 => 'controller', 
               3 => 'action' 
              ) 
     )); 

그런 다음 당신의 매개 변수 "요청 타입"을 확인하고 당신이 무엇을 기반으로 요청을 제공합니다. 요청을 기반으로 JSON 또는 XML을 enconde하도록 레이아웃을 변경해야합니다.

이와 함께 API 모듈이 필요합니다.

참고 : 모듈의 부트 스트랩이 현재 모든 모듈에 추가되므로 모든 모듈에서이 경로를 실행하게하십시오. 현재이 문제를 해결할 수있는 방법을 찾고 있으므로이를 수행 할 방법을 설명 할 수 없습니다.

희망이있었습니다.

0

귀하의 고유 라인이 이것입니다.

$restRoute = new Zend_Rest_Route($front, array(), array('rest')); 

는 특정 컨트롤러 Zend_Rest_Route 있도록 각 모듈 배열 요소의 값으로 제어 이름의 배열을 추가한다.
$restRoute = new Zend_Rest_Route($front, array(), array('api') => array('rest')); 

또한 http://framework.zend.com/manual/en/zend.controller.router.html

내가이 도움이 될 수 있습니다 희망을 참조합니다.

+0

나는 실제로 api/rest/: 컨트롤러에 무엇인가를 원한다. 그래서 api/rest/user와 api/rest/differentresource 둘 다 REST가됩니다. 나는 다른 서비스를 제공 할 수 있도록 더미 API 폴더를 앞에두고 싶습니다. – Joshua

관련 문제