我尝试使用此代码,但不起作用:
$this->getView()->translate("Name"); //not work
$this->_view->translate("Name"); //not work
$this->view->translate("Name"); //not work
答案 0 :(得分:6)
首先,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");
}
}
顺便说一句。如果您使用翻译助手来翻译标签或字段名称,则不必。如果你将翻译器对象设置为Zend_Form
的静态属性,那么就足够了,在你的引导程序中最好:
Zend_Form::setDefaultTranslator($translator);
从那时起,所有字段名称和标签都将自动翻译。
答案 1 :(得分:2)
我不是没有原因,但是当我将此功能添加到我的表单时,它可以工作:
public function init() {
$this->getView();
}
这条线有效:
$this->_view->translate("Name");
答案 2 :(得分:2)
View没有注入到Zend_Form中(当渲染需要时,不要问我原因)。你必须扩展Zend_Form并在自己内部注入视图。其他选项是使用FrontController-> getInstance()> getStaticHelper> viewRenderer并从中接收视图。