[ ZendFramework1 ] スタティックルート、標準ルートを追加する

Pocket

Zend Framework のデフォルトのルート(Zend_Controller_Router_Rewrite)では、存在しないモジュール、 アクションコントローラ、およびアクションに対する要求は 404 エラー(Page not found)となります。

ここでは、上記のような存在しないモジュールやアクションに対する リクエスト URI を 特定のアクションに紐付けて(ルートの追加)、404 エラーではなくアクションを実行するサンプルスクリプトを掲載しています。

どうしても外部システムやアプリケーション更新などの理由で URI の変更ができない場合などには有効ではないかと思います。

スポンサーリンク


スタティックルートの追加

下記は、http://host/henkou/dekinai.html へのリクエストを blog コントローラの view アクションにルーティングするようにスタティックルートの追加を行うサンプルスクリプトです。なお、実際の登録処理は Bootstrap.php で行っています。

// Bootstrap.php 

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    /**
     * ルータにルートを登録する
     */
    protected function _initAddStaticRoute()
    {
        // フロントコントローラオブジェクトを取得
        if(!$this->hasResource('frontController')) {
            $this->bootstrap('frontController');
        }
        $frontController = $this->getResource('frontController');

        // デフォルトルータの取得
        $router = $frontController->getRouter();

        /*
         * POINT:
         * Zend_Controller_Router_Route を使用すればGETパラメータの違いは無視されて
         * ルーティングされる
         */
        $routeStatic = new Zend_Controller_Router_Route_Static (
                                    'henkou/dekinai.html',
                                    array(
                                        'module'     => 'default',
                                        'controller' => 'blog',
                                        'action'     => 'view'
                                    )
                       );
        // 静的ルートを追加
        $router->addRoute('staticroute', $routeStatic);
    }
}

スタティックルートはGETパラメータの違いもNG

上記はスタティックルートの設定なので、GET パラメータがついたリクエストなどは ルーティング対象外となってしまいます。GET パラメータの有無や違いにかかわらずルーティングしたい場合は Zend_Controller_Router_Route_Static ではなく Zend_Controller_Router_Route を使用して標準ルートを登録すれば良いことになります。

アクションコントローラ内で GET パラメータを取得する

前述の view アクションコントローラ内で GET パラメータを取得するサンプルコードは次の通りです。

URL : http://host/henkou/dekinai.html?id=0001

class BlogController extends Zend_Controller_Action
{
    public function viewAction()
    {
        $id = $this->getRequest()->getParam("id");
        // または
        //$id = $_GET['id'];
        
        /*
         * ここで、id を元にそれぞれの処理を行う
         */
    }
}
スポンサーリンク

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>