如何缩短Zend Framework中自定义路由的定义?我目前有这个定义:
$route = new Zend_Controller_Router_Route( ":module/:id", array( "controller" => "index", "action" => "index" ), array("id" => "\d+") ); self::$frontController->getRouter()->addRoute('shortcutOne', $route); $route = new Zend_Controller_Router_Route( ":module/:controller/:id", array("action" => "index"), array("id" => "\d+") ); self::$frontController->getRouter()->addRoute('shortcutTwo', $route); $route = new Zend_Controller_Router_Route( ":module/:controller/:action/:id", null, array("id" => "\d+") ); self::$frontController->getRouter()->addRoute('shortcutThree', $route);
有没有办法更好地结合这些规则?那些放置这些的最佳实践是什么?在Front Controller初始化之后,我现在将它们放在我的引导类中.
我的routes.ini文件开始变得非常大,所以我决定使用Zend Caching来解析它们之后的路由.我使用Xcache作为后端缓存解决方案.这是代码,应该放在Bootstrap.php文件中:
protected function _initRoutes() { $backendType = 'Xcache'; $backendOptions = array(); // Instantiate a caching object for caching the routes $cache = Zend_Cache::factory('File', $backendType, array( 'automatic_serialization' => true, 'master_files'=>array(APPLICATION_PATH . '/configs/routes.ini') ), $backendOptions ); $frontController = Zend_Controller_Front::getInstance(); if(! $router = $cache->load('router')) { // Load up .ini file and put the results in the cache $routes = new Zend_Config_Ini (APPLICATION_PATH . '/configs/routes.ini', 'production'); $router = $frontController->getRouter(); $router->addConfig( $routes, 'routes' ); $cache->save($router, 'router'); } else { // Use cached version $frontController->setRouter($router); } }
我更喜欢在XML上使用*.ini文件,特别是在使用Zend时,因为它更像Zend,而且重量更轻,更紧凑.这是一个几乎相似的配置使用Zend_Config_Ini()
.
的application.ini
[routes] routes.shortcutone.route=:module/:id routes.shortcutone.defaults.controller=index routes.shortcutone.defaults.action=index routes.shortcutone.reqs=\d+
bootstrap.php中
$config = new Zend_Config_Ini('application.ini', 'routes'); $router = Zend_Controller_Front::getInstance()->getRouter(); $router->addConfig($config, 'routes');
请注意,可以重命名文件中的[routes]
部分application.ini
.当重命名时,第二个参数Zend_Config_Ini()
应反映新的节标题.
在设置这样的路由时,我使用配置文件.作为首选,我使用XML来存储我的配置数据,但是这些可以很容易地以另一种支持的格式存储.然后我将路由从配置添加到我的bootstrap中的路由器.
配置:
:module/:id index index :module/:controller/:id index :module/:controller/:action/:id index index
引导
$config = new Zend_Config_Xml('config.xml'); $router = Zend_Controller_Front::getInstance()->getRouter(); $router->addConfig($config, 'routes');
显然,还有其他选择,我建议您阅读相关文档,但是,这适用于您的示例.