Какой лучший способ получить Zend_View

Я работаю над приложением на основе Zend Framework, а в плагинах контроллеров я могу получить объект Zend_View следующими методами. Кто-нибудь, пожалуйста, скажите мне, какой подход лучше и почему?

$view = Zend_Layout::getMvcInstance()->getView();

or

$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
if (null === $viewRenderer->view)
    $viewRenderer->initView();

$view = $viewRenderer->view;

person Bryan    schedule 20.09.2011    source источник
comment
Буду признателен, если вы поделитесь, когда подход к макету лучше и когда следует использовать viewrendrer. Прямо сейчас я пишу плагин контроллера, и мне нужен доступ к объекту просмотра, поэтому какой подход лучше подходит.   -  person Bryan    schedule 21.09.2011
comment
тыс. это разные вещи. viewRenderer отвечает за определение сценария целевого представления и авто-рендеринг после выполнения действия. Zend_Layout используется для создания сценариев разметки. Если вы используете MVC, вы должны иметь доступ к представлению из контроллера с помощью $this->view.   -  person NiematojakTomasz    schedule 21.09.2011
comment
да, я могу получить доступ к представлению в контроллере, но мне нужно получить доступ к представлению в подключаемом модуле контроллера, а объект подключаемого модуля не имеет прямого доступа к представлению. так что нужно знать, какой подход лучше.   -  person Bryan    schedule 21.09.2011


Ответы (4)


Лучше вытащить его из viewRenderer, потому что тогда вы уверены, что всегда получите его. Возможно, вы не используете Layout в некоторых контекстах, и тогда вы не сможете получить представление через макет.

Итак, чтобы быть в безопасности, извлеките его из viewRenderer, он в любом случае более прямой и, следовательно, быстрее.

person markus    schedule 21.09.2011

Поскольку Zend_Layout::getView() метод выглядит следующим образом:

public function getView()
{
    if (null === $this->_view) {
        require_once 'Zend/Controller/Action/HelperBroker.php';
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
        if (null === $viewRenderer->view) {
            $viewRenderer->initView();
        }
        $this->setView($viewRenderer->view);
    }
    return $this->_view;
}

... я бы предпочел его использовать;)

person NiematojakTomasz    schedule 21.09.2011
comment
Что происходит, если макет не используется? - person markus; 21.09.2011

Zend_Controller_Action_Helper определяет getActionController(), с помощью которого вы можете получить общественное мнение. Возможно, у плагинов такой же метод. Хотя мне не нравится получать к нему доступ через общедоступное свойство, я считаю, что предпочтительнее использовать сам контроллер помощника, чем макет.

$view = $this->getActionController()->view;
person David Harkness    schedule 21.09.2011
comment
спасибо Дэвид, но я не говорю о Zend_Controller_Action_helper_Abstract, я говорю о Zend_Controller_Plugin_Abstract, и там у нас есть доступ только к объектам ответа (Zend_Controller_Response_Http) и запроса (Zend_Controller_Request_Http) - person Bryan; 21.09.2011
comment
Да, у меня не было кода передо мной, чтобы перепроверить. Я полагаю, плагины контроллеров не предназначены для использования с самих контроллеров? - person David Harkness; 21.09.2011

оба являются двумя разными вещами, если вы извлекаете представление из макета, чем возвращаемый экземпляр представления в основном поможет вам получить доступ к переменным представления внутри вашего layout.phtml, с другой стороны, просмотр из помощника действия viewRender поможет вам получить доступ к переменным представления в вашем действии .phtml (просмотр для конкретного действия контроллера).

person Mr Coder    schedule 21.09.2011
comment
хм, значит, вы говорите, что если я назначу переменную для просмотра из макета, переменная будет доступна только в layout.phtml, тогда как переменная, назначенная для просмотра из viewRenderer, будет доступна только в action.phtml. Я думаю, что переменные доступны в обоих сценариях, но не уверен. проверка ... - person Bryan; 21.09.2011