我在routes.ini中配置了以下路由
routes.frontnoncms.type = "Zend_Controller_Router_Route_Regex"
routes.frontnoncms.route = "/?([a-zA-Z0-9_-]+)?/?(newsletter|contactus|accessability|search)/?([a-zA-Z0-9_-]+)?/?([a-zA-Z0-9_-]+)?"
routes.frontnoncms.defaults.module = frontManagement
routes.frontnoncms.defaults.controller = Front
routes.frontnoncms.map.locale = 1
routes.frontnoncms.map.action = 2
routes.frontnoncms.map.page = 2
routes.frontcms.map.subpage = 3
routes.frontcms.map.num = 4
如果你注意到参数2被分配了两次。
routes.frontnoncms.map.action = 2
routes.frontnoncms.map.page = 2
结果
array(4) { ["locale"]=> string(2) "en" ["action"]=> string(9) "contactus" ["module"]=> string(15) "frontManagement" ["controller"]=> string(5) "Front" }
数组中有一个action元素,但是没有Page元素。
所以我交换了它们的位置,并将页面行移动到动作行上方。像这样
routes.frontnoncms.type = "Zend_Controller_Router_Route_Regex"
routes.frontnoncms.route = "/?([a-zA-Z0-9_-]+)?/?(newsletter|contactus|accessability|search)/?([a-zA-Z0-9_-]+)?/?([a-zA-Z0-9_-]+)?"
routes.frontnoncms.defaults.module = frontManagement
routes.frontnoncms.defaults.controller = Front
routes.frontnoncms.map.locale = 1
routes.frontnoncms.map.page = 2
routes.frontnoncms.map.action = 2
routes.frontcms.map.subpage = 3
routes.frontcms.map.num = 4
现在结果是这样的。
array(4) { ["locale"]=> string(2) "en" ["page"]=> string(9) "contactus" ["module"]=> string(15) "frontManagement" ["controller"]=> string(5) "Front" }
现在数组中有Page元素,但是这次Action元素不见了。
这是否意味着我只能给一个参数赋值一次?我不会分配两次吗?因为晚一点不行。
你不能这样做,因为在Zend_Framework中它是这样编码的
// params of the function
$values = array(1 => 'en_GB', 2 => 'index', 3 => 'awesome-subpage');
foreach ($values as $key => $value) {
if (array_key_exists($key, $this->_map)) {
$index = $this->_map[$key];
} elseif (false === ($index = array_search($key, $this->_map))) {
$index = $key;
}
$return[$index] = $values[$key];
}
它遍历键(1,2,3,4),只需检查键是否有映射名称(例如:如果一个键有两个映射名,它将不起作用。
如果你想实现这一点,你必须要么扩展Zend_Controller_Router_Route_Regex
和扩展功能_getMappedValues
(但相当丑陋)或在你的控制器中分配值action到你的preDispatch
页(但相当丑陋)或改变你的应用程序设计。
如果你想要更多的信息,你应该看看Zend_Controller_Router_Route_Regex
上的_getMappedValues
函数