Zend framework 从Zend_表单呼叫帮助者

Zend framework 从Zend_表单呼叫帮助者,zend-framework,view,zend-form,helper,Zend Framework,View,Zend Form,Helper,我尝试了以下代码,但不起作用: $this->getView()->translate("Name"); //not work $this->_view->translate("Name"); //not work $this->view->translate("Name"); //not work 我不知道为什么,但当我将此函数添加到表单中时,它会起作用: public function init() { $this->getView(); } 这条线路的工作

我尝试了以下代码,但不起作用:


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

我不知道为什么,但当我将此函数添加到表单中时,它会起作用:


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

这条线路的工作原理是:


视图没有被注入Zend_表单(当渲染需要视图时,不要问我为什么)。您必须扩展Zend_表单并将视图注入到您自己的内部。另一个选项是使用FrontController->getInstance()>getStaticHelper>viewRenderer并从中接收视图

首先,
Zend_视图
不会被注入Zend_表单。因此,当您调用
$this->view
$this->\u 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;
}
这就是为什么以前调用
getView()
时,
$This->\u view->translate()
会起作用的原因,因为它存储为受保护的属性。
根据这一点,该代码应该可以完美地工作,并且适合我:

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");
    }
}
顺便说一句,如果您使用翻译助手翻译标签或字段名称,您不必这样做。如果将translator对象设置为
Zend_Form
的静态属性,就足够了,在引导过程中最好:

Zend_Form::setDefaultTranslator($translator);
从那时起,所有字段名称和标签都将自动翻译

Zend_Form::setDefaultTranslator($translator);