在模块之间共享Zend Helpers(视图或操作)

时间:2010-09-19 19:08:23

标签: php zend-framework plugins

假设您试图让自己尽可能接近Zend Framework的Universe视图,那么一个模块的视图和操作助手应该如何与另一个模块共享?

假设我有两个模块。模块“A”有一个名为Output的视图助手。

class Modulea_Zend_View_Helper_Ouput extends Zend_View_Helper_Abstract
{
    function output($var)
    {
        echo strip_tags($var);
        return true;
    }
}

如果我尝试在模块“B”

中的视图中使用此帮助程序
File: moduleb/views/scripts/index/index.phtml

<?php $this->output($somevar); ?>

我得到了一个例外

  

在注册表

中找不到名称'输出'的插件

使用模块B中的视图助手输出的“正确”是什么。

7 个答案:

答案 0 :(得分:2)

添加Chillini的答案,并回应Starx随后的评论:

如果$view未定义,请尝试将其添加到Bootstrap:

protected function _initView()
{
    // Initialize view
    $view         = new Zend_View();
    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
        'ViewRenderer'
    );
    $viewRenderer->setView($view);
    $view->addHelperPath(
        APPLICATION_PATH . '/views/helpers/',
        'My_View_Helper'
    );
}

此外,我注意到您可能希望将class Modulea_Zend_View_Helper_Ouput更改为class Modulea_Zend_View_Helper_Output以防万一。

答案 1 :(得分:1)

您可以在引导程序中将助手添加到视图中

$this->bootstrap('view');
$view->addHelperPath(APPLICATION_PATH . '/views/helpers/','My_View_Helper');

答案 2 :(得分:1)

仅添加:

resources.view.helperPath.Application_View_Helper = APPLICATION_PATH "/views/helpers"

够了..

答案 3 :(得分:1)

我实现这个的最简单方法如下。

  1. Helpers文件夹
  2. 中创建一个新文件夹Library
  3. 将您的View Helper文件放在一个名为Output.php
  4. 的文件中
  5. 在'Output.php'中,您有以下代码:
  6.  class Helpers_Output extends Zend_View_Helper_Abstract
     {      public function ($var)
         {
          echo strip_tags($var);
          return true;
         }
     }
    

    在Application.ini中添加视图助手路径,如下所示

    resources.view.helperPath.Helpers =“Helpers /”

    我更喜欢这种方法,因为它允许您将助手放在模块外的中心位置,而在其他位置使其可用于整个应用程序,您只需要在Application.ini中输入一行

答案 4 :(得分:1)

这是我的方法:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
    public function __construct($application) {
        parent::__construct($application);
        $this->bootstrap("view");
        $view = $this->getResource('view');
        Zend_Registry::set("Zend_View", $view);
    }
}

class Core_Bootstrap extends Zend_Application_Module_Bootstrap {
    public function __construct($application) {
        parent::__construct($application);
        $view = Zend_Registry::get("Zend_View");
        $view->addHelperPath(APPLICATION_PATH . "/modules/core/views/helpers", 'Core_View_Helper');
    }
}

因为应用程序范围(比如说“全局”)视图助手与模块共享,所以当模块需要将视图助手委托给其他模块时,必须将其添加到应用程序的视图中。如果你的视图帮助器依赖于它自己的模块(即使用模型),那么放入库中就不好了。

上面的代码允许模块热插入应用程序,而不会在主配置文件中进行任何其他更改,只需执行一次,并且在大多数情况下不会弄乱任何其他内容。

答案 5 :(得分:0)

我实际上有一个库文件夹,里面有视图和帮助文件夹。 我把常见的助手放在这个文件夹里。

我的结构:

-application
  --modules
   ---modulea
   ---moduleb
-library
  --view
   ---HELPER

我已使用set_include_path命令将库文件夹添加到我的包含路径。

答案 6 :(得分:0)

如果您将助手放在库路径中,它们将在任何地方自动加载。

library
   Zend
     View
       Helper
         YourHelper.php
   Zend
     Controller
       Action
         Helper
           YourHelper.php

您可以将Zend替换为您自己的命名空间,但您必须设置它,例如。在application.ini

resources.view.helperPath.Application_View_Helper = "Application/View/Helper"
resources.frontController.actionHelperPaths.Application_Controller_Action_Helper = "Application/Controller/Action/Helper"