这与安全性的关系不如与采埃孚的设计有关。正如您所说,通过 URL 调用这些方法时无法访问,但这完全取决于 Zend Framework 处理请求的方式。
引用参考指南:
的工作流程Zend_Controller
相对简单。请求由 接收Zend_Controller_Front
,然后调用Zend_Controller_Router_Rewrite
以确定要分派的控制器(以及该控制器中的操作)。
Zend_Controller_Router_Rewrite
分解 URI 以便在请求中设置控制器和操作名称。Zend_Controller_Front
然后进入一个调度循环。它调用Zend_Controller_Dispatcher_Standard
,将请求传递给它,以分派到请求中指定的控制器和操作(或使用默认值)。
方法名称的格式为Zend_Controller_Dispatcher_Abstract
:
/**
* Formats a string into an action name. This is used to take a raw
* action name, such as one that would be stored inside a Zend_Controller_Request_Abstract
* object, and reformat into a proper method name that would be found
* inside a class extending Zend_Controller_Action.
*
* @param string $unformatted
* @return string
*/
public function formatActionName($unformatted)
{
$formatted = $this->_formatName($unformatted, true);
return strtolower(substr($formatted, 0, 1)) . substr($formatted, 1) . 'Action';
}
Action 后缀是硬编码的,所以不管怎样,Dispatcher 总是会寻找一个 Action 方法。因此,当您请求时/user/show/
,您会UserController::showAction()
因为请求的处理方式而打电话。但它不是安全功能,也不是可见性的替代品。设为showAction()
受保护,您也无法再通过 URL 访问它。从技术上讲,如果您也不通过常规设置运行非操作方法,则可以从 URI 中调用它们。您可以创建自己的 Dispatcher 并轻松更改 ZF 格式化动作名称的方式。
动作后缀有什么好处,它使动作方法与控制器中的其他方法明显区分开来。