Совместное использование Zend Helpers (просмотр или действие) между модулями - PullRequest
3 голосов
/ 19 сентября 2010

Предполагая, что вы пытаетесь максимально приблизиться к представлению 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 ]

2 голосов
/ 19 апреля 2012

Добавить к ответу Чиллини и в ответ на последующий комментарий Старкса:

Если $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 голос
/ 18 августа 2012

Вот мой подход:

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

Поскольку помощники представления в масштабах всего приложения (скажем, «глобального») используются совместно с модулями, когда модулю необходимо делегировать помощника представления другим модулям, необходимо добавить его в представление приложения. Если ваш помощник вида имеет зависимости от своего собственного модуля (т. Е. Использует модели), его просто нехорошо поместить в библиотеку.

Приведенный выше код позволяет горячим подключениям модуля в приложение без каких-либо других изменений в основных конфигурационных файлах, только один раз, и в большинстве случаев это ничего не мешает.

1 голос
/ 22 июля 2012

Проще всего реализовать это следующим образом.

  1. Создайте новую папку, скажем Helpers внутри вашей папки Library
  2. Поместите файл View Helper внутрифайл, который вы назвали бы Output.php
  3. Внутри «Output.php» у вас есть следующий код:
 class Helpers_Output extends Zend_View_Helper_Abstract
 {      public function ($var)
     {
      echo strip_tags($var);
      return true;
     }
 }

И в вашем Application.iniдобавьте путь помощника вида следующим образомв другом, чтобы сделать его доступным для всего вашего приложения, все, что вам нужно, это всего лишь одна строка в Application.ini

1 голос
/ 22 ноября 2010

Только добавить:

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

Достаточно ..

1 голос
/ 20 сентября 2010

Вы можете добавить помощника к вашему представлению в начальной загрузке

$this->bootstrap('view');
$view->addHelperPath(APPLICATION_PATH . '/views/helpers/','My_View_Helper');
0 голосов
/ 20 сентября 2010

Если вы поместите своих помощников в путь к библиотеке, они будут автоматически загружаться куда угодно.

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"
0 голосов
/ 19 сентября 2010

У меня на самом деле есть папка библиотеки и внутри нее папки просмотра и помощника.я поместил в эту папку общих помощников.

моя структура:

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

я добавил папку библиотеки в мой путь включения с помощью команды set_include_path.

...