api
というモジュールでRESTful APIを公開するアプリケーションを作成しています。私Bootstrap
ファイルファイルでZend Framework - Zend_Rest_Routeの追加時にオーバーライドされるカスタム定義のルート
[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
今、私は次のルートを持っているデフォルトモジュールについて
$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;
:他のモジュールのために私は、カスタム定義されたルートとZend_Controller_Router_Rewrite
オブジェクトを返す小さなクラスを作成しました私は以下を持っています:
$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ルートを追加すると、ルータに定義されたルートがオーバーライドされます(?)ので、モジュール($this->getFrontController()->getRouter()->getCurrentRoute();
)のindex
コントローラの現在のルートはZend_Rest_Routeのインスタンスです。ルート設定ファイルの上で定義されたカスタムルートにアクセスしようとするとこのように、言うことができます:
...
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エラーを取得します。
私はすでにドキュメントを閲覧しており、この動作を示唆するヒントは見当たりませんでした。
ご迷惑をおかけして申し訳ございません。
。 iniファイルにカスタムタイプのルートを設定することができました。それはルートがレールで定義される方法です。 –
ええ、それに 'getInstance()'メソッドを追加する必要があります。これは、Zend_Applicationがルートをインスタンス化して.iniを使用してそれらを取得するために使用するものです。私は.iniを頻繁に使っていません。 – Mauro