从Zend_Form打电话给助手

Moh*_*ari 3 zend-framework view helper zend-form

我尝试这些代码,但不起作用:


$this->getView()->translate("Name"); //not work
$this->_view->translate("Name"); //not work
$this->view->translate("Name"); //not work
Run Code Online (Sandbox Code Playgroud)

Rad*_*kel 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;
}
Run Code Online (Sandbox Code Playgroud)

这就是之前$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");
    }
}
Run Code Online (Sandbox Code Playgroud)

BTW.如果您使用翻译助手来翻译标签或字段名称,则不必.如果你将translator对象设置为静态属性Zend_Form,最好在你的bootstrap中就足够了:

Zend_Form::setDefaultTranslator($translator);
Run Code Online (Sandbox Code Playgroud)

从那时起,所有字段名称和标签都将自动翻译.