Вызов помощников из Zend_Form - PullRequest
3 голосов
/ 17 февраля 2011

Я пытаюсь это коды, но не работает:


$this->getView()->translate("Name"); //not work
$this->_view->translate("Name"); //not work
$this->view->translate("Name"); //not work

Ответы [ 3 ]

6 голосов
/ 17 февраля 2011

Прежде всего, Zend_View не вводится в Zend_Form. Поэтому, когда вы звоните $this->view или $this->_view, это не сработает, потому что возвращать нечего. Почему getHelper() работает? Потому что он выбирает представление через вспомогательный брокер (и если вы используете viewRenderer). Посмотрите ниже на код:

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

    return $this->_view;
}

Это причина, по которой $this->_view->translate() работает, если вы ранее вызывали getView(), потому что она хранится как защищенное свойство.
В соответствии с этим, этот код должен работать отлично и работает для меня:

class My_Form extends Zend_Form
{
    public function init() 
    {
        echo $this->getView()->translate('name'); //fires 'translate' view helper and translating value
        //below will also work, because you have view now in _view: getView() fetched it.
        echo $this->_view->translate("another thing");
    }
}

КСТАТИ. Если вы используете translate helper для перевода меток или названий полей, вам это не нужно. Будет достаточно, если вы установите объект-транслятор в качестве статического свойства Zend_Form, лучше всего в вашей начальной загрузке:

Zend_Form::setDefaultTranslator($translator);

И с этого момента все имена полей и метки будут переведены автоматически.

2 голосов
/ 17 февраля 2011

Представление не внедряется в Zend_Form (не спрашивайте меня, почему, когда это требуется для рендеринга).Вы должны расширить Zend_Form и внедрить представление внутри себя.Другим вариантом является использование FrontController-> getInstance ()> getStaticHelper> viewRenderer и получение вида из него.

2 голосов
/ 17 февраля 2011

Не знаю почему, но когда я добавляю эту функцию в форму, она работает:


public function init() {
        $this->getView();
    }


эта строка работает:


$this->_view->translate("Name");

...