期望 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'
),
通过诸如 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'
),