質問

のZend FrameworkんがいるというルートREST api資源の組織化のパターン:

設定方法を教えてくださいことZend_Rest_Route?

こちらかい設定のルートで、ユーザーとリソース(ユーザー id)は私のbootstrap.php ファイル:

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

[調査を実施しているのは、同じ理解し、これは全てルートユーザー/324/items/34う結果パラメータとして設定するid=324事項=34かいにマッピングされ、ユーザー(フロントモジュール)モデルです。あっことができるのかを試験項目パラメータを取得する項目#34ユーザ#324を取得します。]<===んでいうような:

Acessing/ユーザー/234/items/43

var_dump($this->_getAllParams());

のアクションを取得し、コントローラー結果の出力

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

なんだかもidた。

はいかがでしょうか?

役に立ちましたか?

解決

私の知る限り、あなたはこのような何かを行うことができますもし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 のパラメータとがUserControllerに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をサブクラス化し、一致()関数をオーバーライドすることです。コピーもしZend_Rest_Routeのmatch関数が、ちょうど「ダイジェストURIのparams」コメント(約60行で)前に以下を追加します。

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

それはあなたが探している機能を与える必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top