duande8497 2011-06-11 01:25
浏览 30
已采纳

在Zend中使用多语言路由器

I'm developing a multilanguage Zend application with two modules (admin and public), I wanna pass the language code in the url so, in my bootstrap I have:

protected function _initAutoload() {

    $this->bootstrap('frontController');
    $this->_front = $this->getResource('frontController');

    $autoLoader = new Zend_Loader_Autoloader_Resource(array(
                'basePath' => APPLICATION_PATH,
                'namespace' => '',
                'resourceTypes' => array(
                    'form' => array(
                        'path' => 'admin/forms/',
                        'namespace' => 'Admin_Form_',
                    ),
                    'model' => array(
                        'path' => 'models/',
                        'namespace' => 'Model_'
                    )
                )
            ));

    $autoLoader_ = new Zend_Application_Module_Autoloader(array(
                'basePath' => APPLICATION_PATH . '/public/',
                'namespace' => 'Public_',
                'resourceTypes' => array(
                    'forms' => array(
                        'path' => 'forms/',
                        'namespace' => 'Public_Form_'
                    )
                )
            ));

    return $autoLoader;
}

protected function _initConfig() {
    $config = new Zend_Config_Xml(BASE_PATH . '/config.xml', APPLICATION_ENV);
    $registry = Zend_Registry::getInstance();
    $registry->set('config', $config);
    return $config;
}

protected function _initDb() {
    $this->bootstrap('config');
    $config = $this->getResource('config');
    $db = Zend_Db::factory($config->database->adapter, $config->database);
    $db->setFetchMode(Zend_Db::FETCH_OBJ);
    $db->query("SET NAMES 'utf8';");
    $db->query("SET CHARACTER SET 'utf8';");
    Zend_Db_Table::setDefaultAdapter($db);
    return $db;
}

protected function _initRoutes() {
    $router = $this->_front->getRouter();
    $router->removeDefaultRoutes();

    $language = new Zend_Controller_Router_Route(':language', array('language' => 'es'));

    $module = new Zend_Controller_Router_Route_Module(
                    array(
                        'module' => 'public',
                        'controller' => 'index',
                        'action' => 'index'
                    ),
                    $this->_front->getDispatcher(),
                    $this->_front->getRequest()
    );

    $module->isAbstract(true);

    $default = new Zend_Controller_Router_Route_Chain();
    $default->chain($language);
    $default->chain($module);

    $router->addRoute('default', $default);

}

The thing is that I wanna it to work even when I do not specify the language. how can I do it? how can I extract the language code (en) for use it in _initLocale?

Thanks in advance

  • 写回答

3条回答 默认 最新

  • dongqiang5932 2011-06-12 09:10
    关注

    You need to chain all the routes from the language route. See here:

    http://robertbasic.com/blog/chaining-routes-in-zend-framework/

    Two modules:

    $defaultRoute = new Zend_Controller_Router_Route(  
            ':module/:controller/:action', 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输