zend-framework – 如何防止Zend Framework 1解析一个带有点的控
发布时间:2020-12-13 22:49:26 所属栏目:PHP教程 来源:网络整理
导读:我有一个运行在Zend Framework 1.12上的网站.它有一个名为’users’的控制器.当我错误地输入其名称时 – http:// mywebsite / userss – 我理所当然地得到一个错误,说这样的控制器不存在.但是,当我在其名称的末尾添加一个点时: http:// mywebsite / users
我有一个运行在Zend Framework 1.12上的网站.它有一个名为’users’的控制器.当我错误地输入其名称时 – http:// mywebsite / userss – 我理所当然地得到一个错误,说这样的控制器不存在.但是,当我在其名称的末尾添加一个点时:
http:// mywebsite / users.,错误表示不存在名为users./index.phtml的viewscript.有趣的是,它仍然正确地获得控制器(用户). 关于这个问题,我有两个问题: >它如何以及为什么在最后忽略一个点,并且仍能正确获得控制器? 解决方法
很好的问题,但为了回答这个问题,我们挖掘了Zend Framework的源代码,最初回到2007年,一个函数_formatName()专门用于从URL名称中删除此类异常.可能是早于此,但我不知道.
这个特别的作品来自Zend Framework 0.1.4(Historic Right ??):) protected function _formatName($unformatted) { $unformatted = str_replace(array('-','_','.'),' ',strtolower($unformatted)); $unformatted = preg_replace('[^a-z0-9 ]','',$unformatted); return str_replace(' ',ucwords($unformatted)); } 在这里你看 –,_和.在第一步中删除. 即使在今天,此功能设置为删除 – 和.但不是_ 这是该function的当前Zend Framework 1.x版本 protected function _formatName($unformatted,$isAction = false) { // preserve directories if (!$isAction) { $segments = explode($this->getPathDelimiter(),$unformatted); } else { $segments = (array) $unformatted; } foreach ($segments as $key => $segment) { $segment = str_replace($this->getWordDelimiter(),strtolower($segment)); $segment = preg_replace('/[^a-z0-9 ]/',$segment); $segments[$key] = str_replace(' ',ucwords($segment)); } return implode('_',$segments); } 就像在此line中清除URI段之前一样 $segment = str_replace($this->getWordDelimiter(),strtolower($segment)); 函数getWordDelimeter()返回一个数组数组(‘ – ‘,’.’); [line]因此在URL中首先删除它们,它回答了你的第一个问题.关于第二个问题,你可以修改this行并删除.从中. protected $_wordDelimiter = array('-','.'); 在此之后,Despatcher将不再找到控制器或任何URI组件.在上面. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |