というモジュールで RESTful API を公開するアプリケーションを作成していますapi
。Zend_Controller_Router_Rewrite
他のモジュールについては、カスタム定義されたルートを持つオブジェクトを返す小さなクラスを作成しました。
$router = new Zend_Controller_Router_Rewrite();
foreach ($this->_modules as $module) {
if ($module === 'api') continue;
foreach ($this->_getConfigFiles($module) as $filename) {
$config = new Zend_Config_Ini($filename, 'routes');
$router->addConfig($config, 'routes');
}
}
return $router;
デフォルトのモジュールには、次のルートがあります。
[routes]
routes.default_index_index.type = Zend_Controller_Router_Route
routes.default_index_index.route = /
routes.default_index_index.defaults.module = default
routes.default_index_index.defaults.controller = index
routes.default_index_index.defaults.action = index
今、私のBootstrap
ファイル file には次のものがあります。
$router = Shark_Module_Loader::getInstance()->getRouter();
$frontController->setRouter($router);
$frontController->getRouter()->removeDefaultRoutes();
$apiRoute = new Zend_Rest_Route($frontController, array(), array('api'));
$router->addRoute('rest', $apiRoute);
もちろん、残りのルートの追加をスキップすると、デフォルトのモジュールですべてが正常に機能します。しかし、RESTful ルートを追加すると、ルーターで定義されたルートがオーバーライドされる (?) ため、モジュールのコントローラーのindex
アクションの現在のルート ( ) は Zend_Rest_Route のインスタンスになります。したがって、ルート設定ファイルで定義されたカスタム ルートにアクセスしようとすると、次のようになります。index
default
$this->getFrontController()->getRouter()->getCurrentRoute();
...
routes.default_pages_view.type = Zend_Controller_Router_Route
routes.default_pages_view.route = /view/:page
routes.default_pages_view.defaults.module = default
routes.default_pages_view.defaults.controller = pages
routes.default_pages_view.defaults.action = view
...
get
要求アクション ( ) が存在しないという 404 エラーが表示されます。
私はすでにドキュメントを調べましたが、この動作を示唆するヒントは見当たりませんでした。
ヘルプとガイダンスをいただければ幸いです。