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

时间:2012-03-26 06:13:24

标签: php zend-framework

我有一个项目,我正在使用ZendFramework,我也是这个框架中的新手。

所以我的问题是,

我想创建一个用户定义的函数,我可以在所有控制器中使用它。示例:我想创建一个函数来验证输入字段,我将在其中使用trim,htmlspecialchars和mysql_real_escape_string。我想在所有控制器中访问此功能。

我有一个解决方案,我将在我拥有的每个控制器中创建此功能,我认为这不是最好的解决方案。

由于

3 个答案:

答案 0 :(得分:8)

基本控制器是一种解决方案,但对我来说不是最好的。您应该编写自己的动作助手,他们应该这样做。

  

Action Helpers允许开发人员注入运行时和/或按需   扩展的任何动作控制器的功能   化Zend_Controller_Action。行动助手旨在尽量减少必要性   扩展抽象的Action Controller以便注入常见的   动作控制器功能。

更多信息here in the manual

让我们看看如何注册您的Action Helper路径,将其添加到您的application.ini中:

resources.frontController.actionHelperPaths.My_Controller_Action_Helper = "My/Controller/Action/Helper/"

其中我的是您自定义库的名称。

在路径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_FormZend_Filter。 Zend_Filter本身可以StripTagsTrimString,它甚至是更好的方法。

答案 1 :(得分:1)

创建文件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项目做这件事。在此处添加功能以进行翻译或记录可以节省时间。

答案 2 :(得分:0)

Zend Framework有Zend_Controller_Action_Helper