1

自分の仕事で多言語構造をサポートしたかったので、次の行を使用しました

$controller=Zend_Controller_Front::getInstance();
$router=$controller->getRouter();
$languageRouter=new Zend_Controller_Router_Route(":lang/:module/:controller/:action", array("lang"=>"en","module"=>"default","controller"=>"index","action"=>"index"),
                                                array("lang"=>"[a-zA-Z]{2}"));
$router->addRoute("default",$languageRouter);

http:// localhost / zend / public / en lang paramをenに設定し、デフォルトモジュールを呼び出しますが、問題は、このhttp:// localhost / zend / public / en/anything のようなURLを使用するとモジュールではありませんが、それを防ぐ方法をデフォルトのモジュールに示していますか?


takeshinの回答後、この関数をbootstarpファイルに追加しましたが、今では思いどおりに機能します。

protected function _initRoutes()
{
    $routeLang=new Zend_Controller_Router_Route(':lang',array('lang'=>'en'),array('lang'=>'[a-z]{2}'));
    $front  = Zend_Controller_Front::getInstance() /*$this->getResource('frontcontroller')*/;
    $router = $front->getRouter();
    $routeDefault=new Zend_Controller_Router_Route_Module(array(),$front->getDispatcher(),$front->getRequest());
    $routeLangDefault=$routeLang->chain($routeDefault);
    $router->addRoute('default',$routeLangDefault);
    $router->addRoute('lang',$routeLang);
}
4

3 に答える 3

1

defaultZend Application で定義されたモジュールをカスタム モジュールで上書きしたようです。

代わりにルートをチェーンする必要があります。

于 2011-02-20T19:23:52.967 に答える
0

使用している設定は、モジュールがデフォルトに「デフォルト」になることを意味します。そうしないと、ルートが見つからないというエラーがスローされます-適切なエラーコントローラーにスローされるはずです

于 2011-02-20T13:51:41.003 に答える
0

これを正しく理解したかどうかはわかりませんが、正常に動作しているようです。存在しないモジュールを呼び出そうとすると、Zend Framework は自動的にデフォルト モジュールに「リダイレクト」します。

于 2011-02-20T13:53:18.330 に答える