从Zend_Form打电话给助手

时间:2011-02-17 15:59:18

标签: zend-framework view zend-form helper

我尝试使用此代码,但不起作用:


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

3 个答案:

答案 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并从中接收视图。