【问题标题】:How to prevent Zend Framework 1 from resolving a controller name with a dot on its end?如何防止 Zend Framework 1 解析带有点的控制器名称?
【发布时间】:2013-07-19 15:12:12
【问题描述】:

我有一个在 Zend Framework 1.12 上运行的网站。它有一个名为“用户”的控制器。当我输入错误的名称时——http://mywebsite/userss——我理所当然地得到一个错误,说这样的控制器不存在。但是,当我在其名称末尾添加一个点时: http://mywebsite/users.,错误提示名为 users./index.phtml 的视图脚本不存在。有趣的是,它仍然可以正确获取控制器(用户)。

关于这个问题我有两个问题:

  1. 它如何以及为什么会忽略末尾的一个点,但仍能正确获取控制器?
  2. 有没有办法拒绝此类控制器名称,而无需对框架的核心进行任何修改?

【问题讨论】:

    标签: zend-framework url-validation


    【解决方案1】:

    很好的问题,但要回答这个问题,我们已经挖掘了 Zend Framework 的来源,最初回到 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));
    }
    

    在这里,您会看到 -_. 在第一步中被删除。

    即使在今天,此功能仍设置为删除 -.,但不会删除 _

    这是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() 返回一个由array('-', '.'); 组成的数组[line] 从而在 URL 中首先删除它们,这回答了您的第一个问题。关于第二个问题,你可以修改this这一行,把.去掉。

    protected $_wordDelimiter = array('-', '.');
    

    在此之后,调度程序将不再找到控制器或任何带有. 的 URI 组件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      相关资源
      最近更新 更多