很好的问题,但要回答这个问题,我们已经挖掘了 Zend 框架的来源,最初回到 2007 年,_formatName()
专门设计了一个函数来从 URL 名称中删除此类异常。可能比这更早,但我不知道。
这个特别的部分来自 Zend Framework 0.1.4(历史权利??):)
protected function _formatName($unformatted)
{
$unformatted = str_replace(array('-', '_', '.'), ' ', strtolower($unformatted));
$unformatted = preg_replace('[^a-z0-9 ]', '', $unformatted);
return str_replace(' ', '', ucwords($unformatted));
}
在这里,您会在第一步中看到-
、_
和删除。.
即使在今天,此功能也设置为删除-
而.
不是_
这是该功能的当前 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);
}
就像在此行中清除 URI 段之前一样
$segment = str_replace($this->getWordDelimiter(), ' ', strtolower($segment));
该函数返回一个[line]getWordDelimeter()
数组,因此首先在 URL 中删除它们,这回答了您的第一个问题。关于第二个问题,您可以修改此行并从中删除。array('-', '.');
.
protected $_wordDelimiter = array('-', '.');
在此之后,调度程序将不再找到控制器或任何带有.
它的 URI 组件。