Zend доступна ли переменная view внутри помощников view?

#php #zend-framework #view #helper

#php #zend-framework #Вид #помощник

Вопрос:

Мне интересно, доступны ли переменные Zend view в моем вспомогательном классе view без передачи их напрямую в качестве параметров

Спасибо

Luca

Ответ №1:

Поскольку все помощники view имеют ссылку на view в своем $view свойстве, ответ — да.

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

Комментарии:

1. Они есть, но если вы будете использовать их в своем помощнике, это будет очень плохой помощник, поскольку это нарушит один из базовых принципов — развязку.

2. Как вы передаете переменные помощнику view при его вызове?

Ответ №2:

что ж, вы можете получить доступ к $view форме внутри помощника view, я приведу пример: в примере ниже вы можете установить и получить переменные view

 <?php

class App_View_Helper_Job extends Zend_View_Helper_Abstract {

    public function setView(Zend_View_Interface $view) {
        $this->view = $view;
    }

    public function job() {
           $this->view->var1 = "testing var1 ";
           $this->view->var2 = $this->view->var1;
    }
}
  

Комментарии:

1. setView() реализована в Zend_View_Helper_Abstract , поэтому вам не нужно делать это самостоятельно.

Ответ №3:

Вы должны знать одну вещь:
экземпляр view помощника view — это тот, который устанавливается при создании экземпляра помощника, он не обновляется при клонировании view. Таким образом, вы не можете точно сказать, какую из них вы используете, если вызываете, например, из partial.

Комментарии:

1. Это не совсем правильно. Если вы реализуете setView() , он получит фактический View-объект до того, как помощник будет выполнен.

Ответ №4:

Я обнаружил, что когда я устанавливаю экземпляр view в реестре и получаю его из помощника, переменные view остаются. Вот фрагмент кода, который я использовал в своем проекте social engine

 $view = Zend_Registry::get('Zend_View');
/*
 * Check data available and set it to local variable
 */
if(isset($view->localeTranslations[$key]))
{
   $translate = $view->localeTranslations[$key];
}