我有一个项目,我正在使用ZendFramework,我也是这个框架的新手。
所以我的问题是
我想创建一个用户定义的函数,可以在所有控制器中使用。示例:我想创建一个函数来验证一个输入字段,在该字段中我将使用trim、htmlspecialchar和mysql_real_eescape_string。我想访问所有控制器中的此功能。
我有一个解决方案,那就是我会在我拥有的每个控制器中创建这个函数,我认为这不是最好的解决方案。
感谢
基本控制器是一种解决方案,但对我来说不是最好的。你应该编写自己的Action Helper,他们就是这样做的。
Action Helpers允许开发人员注入运行时和/或按需扩展到任何操作控制器的功能Zend_Controller_Action。行动帮助旨在将必要性降至最低扩展抽象Action Controller以便注入公共动作控制器功能。
更多信息请参阅手册。
让我们看看如何注册Action Helper路径,将其添加到您的application.ini中:
resources.frontController.actionHelperPaths.My_Controller_Action_Helper = "My/Controller/Action/Helper/"
其中My是自定义库的名称。
在路径My/Controller/Action/Helper/
中,您可以添加一个文件MyActionHelper.php
,如下所示:
class My_Controller_Action_Helper_MyActionHelper extends Zend_Controller_Action_Helper_Abstract
{
public function direct($input)
{
$output = mysql_real_escape_string($input);
// trim, etc.
return $output;
}
}
这就是你所需要做的!最后,您可以使用$this->_helper->myActionHelper($input);
从任何控制器访问您的动作助手。
如果您需要验证来自表单的输入,请查看Zend_form和Zend_Filter。Zend_Filter可以原生地使用StripTags和TrimString,这甚至是一种更好的方法
创建文件Util.php并将其放入库文件夹然后打开index.php(在公共文件夹中)
添加
require_once 'Util.php';
线后
require_once 'Zend/Application.php';
因此,例如,你的Util.php可能看起来像
function mysql_real_escape_string($value)
{
return $value
}
function logger($value)
{
Zend_Regsitry::get('logger')->log($value);
}
function _T($translate)
{
return Zend_Registry::get('translator')->translate($translate);
}
现在,所有这些函数都是全局的,您可以在zf应用程序的任何位置自由调用它们。我对我的每个ZF项目都这样做。在这里添加用于翻译或日志记录的函数可以节省时间。