代码之家  ›  专栏  ›  技术社区  ›  Alana Storm

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

  •  3
  • Alana Storm  · 技术社区  · 15 年前

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

    假设我有一个包含两个模块的。模块“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); ?>
    

    我有个例外

    在注册表中找不到名为“Output”的插件

    正确的做法是使用模块B的视图辅助输出。

    7 回复  |  直到 15 年前
        1
  •  2
  •   Yes Barry    13 年前

    为了补充奇利尼的回答,并回应Starx随后的评论:

    如果 $view 未定义,请尝试将其添加到引导程序:

    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 以防万一。

        2
  •  1
  •   Chris    15 年前

    仅添加:

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

    够了。。

        3
  •  1
  •   Yes Barry    13 年前

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

    $this->bootstrap('view');
    $view->addHelperPath(APPLICATION_PATH . '/views/helpers/','My_View_Helper');
    
        4
  •  1
  •   dade    13 年前

    实现这一点的最简单方法如下。

    1. 创建一个新文件夹 Helpers 在你的内心 Library 文件夹
    2. 将视图助手文件放入一个您想命名的文件中 Output.php
    3. 在“输出”中。php'您有以下代码:
     class Helpers_Output extends Zend_View_Helper_Abstract
     {      public function ($var)
         {
          echo strip_tags($var);
          return true;
         }
     }
    

    在你的申请中。ini添加视图辅助路径,如下所示

    资源。看法助手路径。Helpers=“Helpers/”

    我更喜欢这种方法,因为它可以让你把助手放在模块外的中心位置,也可以放在其他位置,让整个应用程序都可以使用。你只需要应用程序中的一行条目。伊尼

        5
  •  1
  •   Iseus    13 年前

    以下是我的方法:

    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');
        }
    }
    

    由于应用程序范围(比如“全局”)的视图帮助程序与模块共享,因此当模块需要将视图帮助程序委派给其他模块时,必须将其添加到应用程序的视图中。如果您的视图助手依赖于自己的模块(即使用模型),那么将其放入库中是不好的。

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

        6
  •  0
  •   rahim asgari    15 年前

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

    我的结构:

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

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

        7
  •  0
  •   takeshin    15 年前

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

    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"