設定方法は階層Zend休んでしまったのです。
-
18-09-2019 - |
質問
のZend FrameworkんがいるというルートREST api資源の組織化のパターン:
- http://example.org/users/
- http://example.org/users/234
- http://example.org/users/234/items
- http://example.org/users/234/items/34
設定方法を教えてくださいこと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);
}
それはあなたが探している機能を与える必要があります。