문제

Zend 프레임 워크를 사용하면 다음 패턴으로 구성된 리소스에 대한 REST API의 경로를 구축하려고합니다.

zend_rest_route로 이것을 어떻게 설정합니까?

다음은 bootstrap.php 파일에서 사용자 리소스 (user/: id)의 경로를 설정하는 방법입니다.

  $this->bootstrap('frontController');
  $frontController = Zend_Controller_Front::getInstance();
  $restRoute = new Zend_Rest_Route($frontController);
  $frontController->getRouter()->addRoute('default', $restRoute);

내가 이해하는 한, 이것은 모든 경로이므로 사용자/324/항목/34는 id = 324 및 항목 = 34로 설정되며 모든 것이 사용자 (전면 모듈) 모델에 매핑됩니다. 거기에서 나는 항목 매개 변수를 테스트하고 GET 요청에서 사용자 #324의 항목 #34를 검색 할 수 있다고 생각합니다.] <=== 방금 확인했는데 다음과 같은 작동하지 않는 것 같습니다.

Acessing/Users/234/Items/43 및

var_dump($this->_getAllParams());

REST 컨트롤러의 동작에서 다음은 다음과 같은 출력을 초래합니다.

array(4) {
 ["controller"]=> string(5) "users"
 ["action"]=>  string(3) "get"
 [2]=>  string(5) "items"  ["module"]=>  string(7) "default"]
}

어떻게 든 두 ID가 모두 길을 잃었습니다 ...

누구나?

도움이 되었습니까?

해결책

afaik, zend_rest_route에는 기능이 없어서 이와 같은 일을 할 수 있습니다. 제안이 있지만 언제 구현 될지 확실하지 않습니다. 부트 스트랩에 이것을 추가 하여이 사용자 지정 경로를 설정할 수 있습니다.

$front = $this->getResource('FrontController'); 
$testRoute = new Zend_Controller_Router_Route(
    'users/:user_id/items/:item_id',
    array(
        'controller' => 'users',
        'action' => 'item',
        'module' => 'default'
    )
);

$front->getRouter()->addRoute('test', $testRoute);

user_id 또는 item_id 사용자 controller에서 itemAction에서 매개 변수로 사용할 수 있습니다.

$user_id = $this->_request->getParam('user_id');

다른 팁

솔루션을 Github 및 작곡가 패키지로 공개했습니다. 보다 https://github.com/aporat/application_rest_controller_route.

zend_controller_router_route를 확장하는 새로운 클래스를 추가하고 Abiliy를 추가하여 다음과 같은 사용자 정의 편안한 경로를 추가합니다.

$frontController = Zend_Controller_Front::getInstance();
$frontController->getRouter()->addRoute('users-messages', new Application_Rest_Controller_Route($frontController, 'users/:user_id/messages', ['controller' => 'users-messages']));

zend_rest_route 컨트롤러 이름의 첫 번째 매개 변수는 1 개의 매개 변수가있을 때만 'ID'로 맵핑됩니다.

내가 생각해 낸 가장 좋은 솔루션은 Zend_rest_route를 서브 클래스하고 match () 함수를 무시하는 것입니다. zend_rest_route의 일치 함수를 복사하지만 "Digest Uri Params"주석 (약 60 줄) 직전에 다음을 추가하십시오.

if($pathElementCount > 1 && $path[0] != 'id') {
    $params['id'] = urldecode($path[0]);
    array_shift($path);
}  

그것은 당신이 찾고있는 기능을 제공해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top