Какой подход лучше получить Zend_View - PullRequest
1 голос
/ 21 сентября 2011

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

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

или

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

$view = $viewRenderer->view;

Ответы [ 4 ]

2 голосов
/ 21 сентября 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;
}

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

1 голос
/ 21 сентября 2011

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

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

0 голосов
/ 21 сентября 2011

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

0 голосов
/ 21 сентября 2011

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

$view = $this->getActionController()->view;
...