用户定义的功能,我可以在我的所有控制器中使用


User defined function which I can use in all of my controllers

我有一个项目,我正在使用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项目都这样做。在这里添加用于翻译或日志记录的函数可以节省时间。

Zend框架具有Zend_Controller_Action_Helper。