Прежде всего, 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);
И с этого момента все имена полей и метки будут переведены автоматически.