2011-02-17 45 views

回答

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; 
} 

這就是爲什麼的作品,如果你之前打電話getView(),因爲它保存爲保護財產。 BTW

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); 

從那個時候所有字段名稱和標籤會被自動翻譯。

2

我不無原因,但是當我添加此功能,我的形式,它的工作:


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


這條線的工作原理:


$this->_view->translate("Name"); 
 
2

的觀點是沒有注入Zend_Form(不要問我爲什麼,什麼時候需要渲染)。你必須擴展Zend_Form並在你自己內部注入視圖。其他選項是使用FrontController-> getInstance()> getStaticHelper> viewRenderer並從中接收視圖。