0

Zend フレームワークを使用して Web アプリケーションを実行しています。私が使用しているライブラリは1.12です

プロジェクトには、Default と Admin の 2 つのモジュールがあります。

デフォルトのモジュールには、ルーターを設定した静的ページがいくつかあります。ルーターでコントローラーとアクションを設定しました。以下のコードを参照してください。

ブートストラップファイルでは、

    protected function _initModules() {

        $defaultstaticRoute = new Zend_Controller_Router_Route(
                                '/:staticpage',
                                array('module' => 'default',
                                    'controller' => 'index',
                                    'action' => 'displaystatic',
                                    'staticpage' => '([a-z0-9]+-)*[a-z0-9]+'  
                                    ),                 
                                array(
                                   'staticpage' => '([a-z0-9]+-)*[a-z0-9]+'                 
                                )
                            );

            $router->addRoute('defaultstatic', $defaultstaticRoute);
    }

コントローラーでは、

class IndexController extends Zend_Controller_Action
{
    public function init()
    {

    }

    public function indexAction()
    {

    }

    public function displaystaticAction()
    {       
        //get the file name from the url
       $page = $this->getRequest()->getParam('staticpage');

        //render the view
       $this->render($page);

     }
}

URLが次のような場合、上記のコードは正常に機能してい http://myproject/indexますhttp://myproject/aboutus

しかし、ページ名のないURLの場合、

http://myproject/

次に、インデックスページを表示する必要がある間、404 not found ページにリダイレクトされます。

この問題を追跡したところ、Index Controller の init() メソッドで発生し、404 になった後に発生することがわかりました。

私のコードで間違っているのは何ですか?

編集:
上記の問題は、Tim Fountain によって提供されたソリューションによって解決されますが、別の問題が見つかり、上記のトリックでは解決されません。以下はコードです、

ブートストラップ ファイル:

 $servicesstaticRoute = new Zend_Controller_Router_Route(
    'services/:pagename',
    array('module' => 'default',
            'controller' => 'services',
            'action' => 'displayservices',
            'pagename' => 'index'    
        ),                 
        array(
           'pagename' => '([a-z0-9]+-)*[a-z0-9]+'                 
        )
    );
$router->addRoute('servicesstatic', $servicesstaticRoute);

上記のコードではhttp://myproject/services/indexは機能しますが、http://myproject/services/は機能しません。

4

1 に答える 1

2

ルートの最初の配列はデフォルト値を提供します。静的ページの「インデックス」をレンダリングする場合は、この配列http://myproject/の値を「インデックス」に変更する必要があります。staticpage

$defaultstaticRoute = new Zend_Controller_Router_Route(
                            '/:staticpage',
                            array('module' => 'default',
                                'controller' => 'index',
                                'action' => 'displaystatic',
                                'staticpage' => 'index'  
                                ),                 
                            array(
                               'staticpage' => '([a-z0-9]+-)*[a-z0-9]+'                 
                            )
                        );

そうすればstaticpage、URLにが存在しない場合、値'index'が与えられます。

代わりにコントローラーのインデックスアクションをレンダリングする場合は、staticpageのデフォルト値を削除するだけで、ルートはこのリクエストと一致しなくなります。

于 2013-01-23T10:17:58.020 に答える