期望 Zend 找不到动作,但它找到了并尝试呈现视图

Expecting Zend to fail to find an action, but instead it finds it and tries to render a view

通过诸如 public function checkImagesAction() 之类的操作,我可以在我的浏览器中使用 /checkImages 请求该路由,并且该页面会按照我的预期使用 check-images.phtml 视图显示。

但是,请求 /checkImageS 或其他疯狂的拼写会导致 Zend 抛出 RuntimeException,因为它是 unable to render template check-Images-S

我猜这与使用

形式的路由有关
   'route' => '/thing[/:action][/]',
                    'constraints' => array(
                        'action' => '[a-zA-Z0-9_-]*',
                        'id' => '[0-9]+',
                    ),

为什么 Zend 匹配操作,尽管大写字母和小写字母疯狂,但随后尝试在大写字母处连字符?我原以为它会失败,只使用匹配动作的连字符版本,即检查图像。

有趣的问题。默认情况下,ZF 将根据操作名称呈现模板,但它使用连字符作为模板名称的约定,并将驼峰式操作转换为这种格式。 PHP 函数不区分大小写,因此在您的示例中,checkImageSAction() 是被调用的函数,因此 check-image-s.phtml 是 ZF 然后尝试呈现的函数。

就我个人而言,我避免在 URL 中使用大写字母 - 这只是个人喜好,但在您的情况下这将是一个简单的解决方法。或者你可以让路线更明确一点:

'route' => '/thing/checkImages[/]',
            'constraints' => array(
                'action' => 'check-images'
            ),