1

私は Zend Framework の初心者なので、正規表現ルーティング ルールが見つからない理由を理解していただければ幸いです。ルールは次のとおりです。

    // Picture: www.mywebsite.com/gallery/12/pic/45/my-beautiful-picture.html
    $router->addRoute('picture',
            new Zend_Controller_Router_Route_Regex(
                    'gallery/(\d+)/pic/(\d+)/([A-Za-z0-9.]+)',
                    array(
                            'module'=>'frontoffice',
                            'controller'=>'gallery',
                            'action'=>'picture'
                    ),
                    array(
                            1 => 'gallery_id',
                            2 => 'picture_id',
                            3 => 'title'
                    ),
                    'gallery/%d/pic/%d/%s'
            )
    );

ページ www.mywebsite.com/gallery/1/pic/9/my-beautiful-picture.html にアクセスすると、次のエラー メッセージが表示されます。

 An error occurred
 Page not found
 Exception information:

 Message: Action "1" does not exist and was not trapped in __call()
 Stack trace:

 #0 /usr/local/zend/share/ZendFramework/library/Zend/Controller/Action.php(518): Zend_Controller_Action->__call('1Action', Array)
 #1 /usr/local/zend/share/ZendFramework/library/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch('1Action')
 #2 /usr/local/zend/share/ZendFramework/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
 #3 /usr/local/zend/share/ZendFramework/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
 #4 /usr/local/zend/share/ZendFramework/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
 #5 /var/www/misterjules/public/index.php(27): Zend_Application->run()
 #6 {main}  

 Request Parameters:

 array (
    'controller' => 'gallery',
    'action' => '1',
    'pic' => '9',
    'module' => 'frontoffice',
 )  

正常に動作する他の正規表現ルーティング ルール (スクリプトで以前に記述) は次のとおりです。

    // *** GALLERY ***
    // Galleries (index): www.mywebsite.com/gallery
    $router->addRoute('galleries',
            new Zend_Controller_Router_Route_Regex(
                    'gallery(/page=(\d+))?',
                    array(
                            'module'=>'frontoffice',
                            'controller'=>'gallery',
                            'action'=>'galleries'
                    ),
                    array(
                            2 => 'page',
                    ),
                    'gallery'
            )
    );

    // a gallery index: www.mywebsite.com/gallery/13/my-travel-in-dublin.html
    //                  OR www.mywebsite.com/gallery/13/my-travel-in-dublin.html/page=4
    $router->addRoute('gallery',
            new Zend_Controller_Router_Route_Regex(
                    'gallery/(\d+)/([A-Za-z0-9.]+)(/page=(\d+))?',
                    array(
                            'module'=>'frontoffice',
                            'controller'=>'gallery',
                            'action'=>'gallery'
                    ),
                    array(
                            1 => 'gallery_id',
                            2 => 'title',
                            4 => 'page'
                    ),
                    'gallery/%d/%s'
            )
    );

どこが間違っているのか分かりません。

ご協力いただきありがとうございます。

ジュール

4

1 に答える 1

1

一致するために必要なダッシュが正規表現にないようgallery/12/pic/45/my-beautiful-picture.htmlです。

これを試して:

$router->addRoute('picture',
        new Zend_Controller_Router_Route_Regex(
                'gallery/(\d+)/pic/(\d+)/([A-Za-z0-9.-]+)', #etc.
于 2012-06-17T09:54:59.677 に答える