0

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ルートを削除すると、ルーティングの問題はなくなります。残りのリクエストがどのコントローラーにルーティングする必要があるかについて言及している限り、問題はありません。ただし、これはデフォルトのコントローラールーティングに影響を与えています。

4

1 に答える 1

0

これは一般的な問題のようで、通常は次のような方法で解決されます。

$this->url(array('controller'=>'network','action'=>'homepage','module'=>'default'), 'default');

また:

$this->url(array('controller'=>'network','action'=>'homepage','module'=>'default'), NULL, TRUE);

うまくいくかもしれません。

'module'=>'default'がデフォルトのコントローラディレクトリである場合/application/controllersは、ルートからモジュールオプションを省略できます。

これがURLメソッド全体です。リセットオプションのコメントに注意してください。

/**
     * Generates an url given the name of a route.
     *
     * @access public
     *
     * @param  array $urlOptions Options passed to the assemble method of the Route object.
     * @param  mixed $name The name of a Route to use. If null it will use the current Route
     * @param  bool $reset Whether or not to reset the route defaults with those provided
     * @return string Url for the link href attribute.
     */
    public function url(array $urlOptions = array(), $name = null, $reset = false, $encode = true)
    {
        $router = Zend_Controller_Front::getInstance()->getRouter();
        return $router->assemble($urlOptions, $name, $reset, $encode);
    }
于 2012-03-04T08:31:07.467 に答える