Zend_Rest_Controllerを拡張してRESTfulサービスを実装しました。サービスは素晴らしいです。実際にRESTfulな動作をするコントローラーは1つだけです。そこで、ブートストラップにそのコントローラーだけの残りのルートを追加しました。
protected function _initRestRoute()
{
$this->bootstrap('frontController');
$frontController = Zend_Controller_Front::getInstance();
$restRoute = new Zend_Rest_Route($frontController, array() , array('default' => array('MyserviceController')));
$frontController->getRouter()->addRoute('rest', $restRoute);
}
ポータルzendアプリを実行すると問題が発生します。インデックスコントローラーのレイアウト内のリンクは、URLを作成するときにアクションパラメーターを見逃しています。たとえば、ネットワークコントローラのアクションホームページのインデックスレイアウトのリンクは次のとおりです。
$this->url(array('controller'=>'network','action'=>'homepage','module'=>'default'));
これにより、「localhost / projectname / public / network / homepage」が返され、代わりに「localhost / projectname / public/network」が返されます。この動作は、レイアウトがデフォルトのコントローラー、つまりIndexControllerによってロードされた場合にのみ発生します。ブートストラップからzendrestルートを削除すると、ルーティングの問題はなくなります。残りのリクエストがどのコントローラーにルーティングする必要があるかについて言及している限り、問題はありません。ただし、これはデフォルトのコントローラールーティングに影響を与えています。