Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zend framework Zend动作助手_Zend Framework - Fatal编程技术网

Zend framework Zend动作助手

Zend framework Zend动作助手,zend-framework,Zend Framework,我正在学习如何使用Zend框架,并认识到action helper是非常有用的。 我已经在我的机器上设置了Zend的默认安装,但是我不知道帮助文件需要放在哪里,我需要在引导文件中放什么,以及如何使用它。有人能给我指出正确的方向吗?我不清楚ZF用户指南 谢谢 John您可以在自己的库中放置操作助手。除了library/Zend(所有Zend内容都在其中)之外,您还可以创建library/MyLibrary文件夹(MyLibrary是任意选择的)并将操作助手放在那里 一个很好的位置是library/

我正在学习如何使用Zend框架,并认识到action helper是非常有用的。 我已经在我的机器上设置了Zend的默认安装,但是我不知道帮助文件需要放在哪里,我需要在引导文件中放什么,以及如何使用它。有人能给我指出正确的方向吗?我不清楚ZF用户指南

谢谢
John

您可以在自己的库中放置操作助手。除了library/Zend(所有Zend内容都在其中)之外,您还可以创建library/MyLibrary文件夹(MyLibrary是任意选择的)并将操作助手放在那里

一个很好的位置是library/MyLibrary/Controller/Action/Helper文件夹,您需要在那里创建并放置操作助手(即Navigation.php)。在此文件中,创建类
MyLibrary\u Controller\u Action\u Helper\u Navigation

下一步是在引导过程中将动作助手添加到Zend框架的HelperBroker中。因此,在Bootstrap.php文件中创建一个新方法并添加以下函数:

protected function _initActionHelpers ()
{
    Zend_Controller_Action_HelperBroker::addHelper(
        new MyLibrary_Controller_Action_Helper_Navigation()
    );
}
最后一句话是,您需要通过将此规则添加到application.ini来配置此库的使用:

autoLoaderNameSpaces[] = "MyLibrary_"

关于放置自定义操作助手的位置,有两个想法:

  • 在单独的自定义库中
  • 在文件夹
    application/controllers/helpers
  • 这些想法并非排他性的。可以在多个项目中使用的足够通用的功能可能应该被拉入一个单独的库中。但对于特定于应用程序的功能,有一个论点认为它可能位于
    应用程序
    文件夹中的某个位置

    @Jurian已经描述了“独立库”方法。对于特定于应用程序的帮助程序,您可以执行以下操作:

    对于名为myHelper的助手,在文件
    Application/controllers/helpers/myHelper.php
    中创建一个类
    Application\u Controller\u helper\u myHelper
    。在
    Bootstrap
    中,您有如下功能:

    protected function _initAutoload()
    {
        $autoloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => 'Application',
            'basePath'  => APPLICATION_PATH,
        ));
    
        Zend_Controller_Action_HelperBroker::addPath(
            APPLICATION_PATH . '/controllers/helpers', 
            'Application_Controller_Helper_');
    
        return $autoloader;
    }
    
    然后可以在控制器中使用以下命令调用您的助手:

    $this->_helper->myHelper;
    
    如您所见,这假定您正在使用appNamespace“Application”。如果没有,您可以(必须!)修改类名以适应您的环境


    干杯

    您可以通过
    应用程序.ini
    文件这样做

    resources.view[] =
    resources.view.helperPath.Default_View_Helper_ = APPLICATION_PATH "/views/helpers/"
    
    然后在您的
    视图/助手
    路径中,您可以创建一个类似
    Time.php
    的文件。此文件将包含以下代码:

    <?php
    
    class Default_View_Helper_Time extends Zend_View_Helper_Abstract
    {
        public function time()
        {
            $date = new Zend_Date();
    
            return $date->get(Zend_Date::TIME_MEDIUM);
        }
    }
    
    ?>
    
    
    
    要在视图脚本中使用它,您将使用

    <?=$this->time()?>
    
    
    

    它将使用新的
    视图\u助手显示当前时间

    您可以通过在
    应用程序.ini
    中声明操作助手名称空间和路径来避免在
    Bootstrap.php
    中注册操作助手名称空间和路径,如下所示:

    resources.frontController.actionHelperPaths.My_Controller_Action_Helper = APPLICATION_PATH "/controllers/helpers"
    
    只需将
    My\u Controller\u Action\u Helper
    替换为所需的名称空间,并相应地修改helpers目录路径

    可以使用相同的方法初始化帮助器:

    $this->_helper->myHelper;
    
    正如文档中提到的,注册helpers的前缀或路径通常是首选的,因为helpers在被调用之前不会被初始化,就像上面的代码片段一样

    当然,实例化助手并将其传递给代理有点困难 时间和资源密集型,因此有两种方法可以实现自动化 略加说明:addPrefix()和addPath()


    将配置条目添加到
    application.ini
    遵循相同的建议模式。

    小提示,由于您是使用
    application\u path
    启动路径,因此您的“/application/controllers/helpers”应该只是“/controllers/helpers”,而不使用
    /application
    。我还发现前缀
    'Application\u Controller\u Helper.
    不必与物理文件夹结构匹配。如果将前缀(第二个参数)设置为
    Blabla_
    ,只要操作助手类都以
    Blabla_Helpername
    开头,它就可以工作。这有助于减少类名,如果这对您很重要的话。当然+1是一个很好的答案。哦!你说得对:
    应用程序
    路径已经包含在应用程序路径中。很抱歉纠正我的回答。当然,您是对的:因为您可以在
    addPath()
    调用中定义映射,所以您几乎可以使用任何想要的类名。我倾向于在我自己的库名称空间中模仿Zend结构,即使它们稍微长一点。例如,我通常将一个插件命名为
    My\u Controller\u plugin\u SomePlugin
    ,但我经常看到其他人使用类似
    My\u plugin\u SomePlugin
    。正如您所观察到的,只要您的
    addPath()
    调用正确映射它,任何一种方法都可以工作。谢谢,干杯!;-)您好,我如何在我的应用程序控制器帮助程序上调用视图帮助程序。。?