1

現在のアプリケーション セットアップでは、標準コントローラーとレスト コントローラーのルーティングを作成しようとしています。

これが私の構造です。

/application
  /modules
    /module
      /controllers
        /Admin
        /Api

admin サブフォルダー内のコントローラーを呼び出すには:

/module/admin_controller/action

これを次のように変更します。

/admin/module/controller/action

私の現在のセットアップでは:

/* application.ini */
;Default route
resources.router.routes.defaultmodule.type = Zend_Controller_Router_Route_Module
resources.router.routes.defaultmodule.defaults.module = "default


; APi route
resources.router.routes.api.type = Zend_Controller_Router_Route
resources.router.routes.api.route = ":api" 
resources.router.routes.api.reqs.api = "api"
resources.router.routes.apichain.type = Zend_Controller_Router_Route_Chain
resources.router.routes.apichain.chain = "api, defaultmodule"

; Admin route
resources.router.routes.admin.type = Zend_Controller_Router_Route
resources.router.routes.admin.route = ":admin" 
resources.router.routes.admin.reqs.admin = "admin"
resources.router.routes.adminchain.type = Zend_Controller_Router_Route_Chain
resources.router.routes.adminchain.chain = "admin, defaultmodule"


/* Plugin */
class Pwb_Plugin_ControllerRoute
    extends Zend_Controller_Plugin_Abstract
{    
    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        if ($request->getParam('admin')) {
            $admin_controller = $request->getParam('admin') . '_' . $request->getControllerName();
            $request->setControllerName($admin_controller);
        }

        if ($request->getParam('api')) {
            $admin_controller = $request->getParam('api') . '_' . $request->getControllerName();
            $request->setControllerName($admin_controller);
        }
    }
}

/* Module Bootstrap */
class Acl_Bootstrap
    extends Zend_Application_Module_Bootstrap
{
    protected function _initRestRoute()
    {
        $this->bootstrap('frontController');
        $frontController = Zend_Controller_Front::getInstance();
        $restRoute = new Zend_Rest_Route(
                $frontController,
                array(),
                array(
                    'acl' => array(
                        'api_role'
                    ))
        );
        $frontController->getRouter()->addRoute('restAcl', $restRoute);
    }

}

ここでの問題は、API フォルダー内の一部のコントローラーが Rest であるが、すべてではないということです。

/api/acl/role は、期待どおり indexAction に正しくルーティングされています。

/api/acl/role/1 は、getAction にルーティングされるアクション「1」を探しています。

モジュール Bootstrap の Zend_Route_Rest をこれらのルールセットに統合するにはどうすればよいでしょうか。

すべての助けをいただければ幸いです。

4

1 に答える 1