2014-07-02 148 views
0

翻譯形式(標籤)有問題。 在互聯網上搜索幾個小時後,我無法找到一個體面的解釋應該如何做。Zend框架2.3翻譯形式

誰能幫我一個忙嗎?

我使用的FormCollection($形式)作爲寫在ZF2.3手動

add.phtml

$form->setAttribute('action', $this->url('album', array('action' => 'add'))); 
$form->prepare(); 

echo $this->form()->openTag($form); 
echo $this->formCollection($form); 
echo $this->form()->closeTag(); 

AlbumForm.php

namespace Album\Form; 

use Zend\Form\Form; 
use Zend\I18n\Translator\Translator; 

class AlbumForm extends Form 
{ 
    public function __construct($name = null) 
    { 
     // we want to ignore the name passed 
     parent::__construct('album'); 

     $this->add(array(
      'name' => 'id', 
      'type' => 'Hidden', 
     )); 

     $this->add(array(
      'name' => 'title', 
      'type' => 'Text', 
      'options' => array(
       'label' => $this->getTranslator()->translate('Name'), //'Naam', 
      ), 
     )); 

     $this->add(array(
      'name' => 'artist', 
      'type' => 'Text', 
      'options' => array(
       'label' => 'Code: ', 
      ), 
     )); 

     $this->add(array(
      'name' => 'submit', 
      'type' => 'Submit', 
      'attributes' => array(
       'value' => 'Go', 
       'id' => 'submitbutton', 
      ), 
     )); 
    } 
} 

錯誤:

Fatal error: Call to undefined method Album\Form\AlbumForm::getTranslator() in /Applications/MAMP/htdocs/demo/module/Album/src/Album/Form/AlbumForm.php on line 24 
+0

凡在文檔它表示在Form類上使用getTranslator嗎?在Zend/Form/Form中沒有getTranslator方法,所以如果你還沒有在Album/Form中添加一個getTranslator方法,那麼顯然它不起作用。我很好奇你在文檔中閱讀的內容。這可能意味着getTranslator在別處實現。 – bcmcfc

+0

如果您想在表單中執行此操作,您需要注入翻譯服務。 http://stackoverflow.com/questions/10923378/zf2-equivalent-of-getservicelocator-in-zend-form – cptnk

+0

@bcmcfc:它沒有寫在手冊中。 我一直在尋找信息和解決方案的互聯網和計算器。我發現這個信息在某處嘗試,但沒有成功。 這就是我結束的地方。 –

回答

1

表格有默認情況下不知道翻譯員。你可以做什麼,是明確的,並注入翻譯。

'service_manager' => [ 
    'factories' => [ 
     'Album\Form\AlbumForm' => 'Album\Factory\AlbumFormFactory', 
    ], 
], 

現在你可以爲這種形式創建一個工廠:因此,您的形式定義一個工廠

namespace Album\Factory; 

use Zend\ServiceManager\FactoryInterface; 
use Zend\ServiceManager\ServiceLocatorInterface; 

use Album\Form\AlbumForm; 

class AlbumFormFactory implements FactoryInterface 
{ 
    public function createService(ServiceLocatorInterface $sl) 
    { 
     $translator = $this->get('MvcTranslator'); 
     $form  = new AlbumForm($translator); 

     return $form; 
    } 
} 

現在,完成您的窗體類:

namespace Album\Form; 

use Zend\Form\Form; 
use Zend\I18n\Translator\TranslatorInterface; 

class AlbumForm extends Form 
{ 
    protected $translator; 

    public function __construct(TranslatorInterface $translator) 
    { 
     $this->translator = $translator; 

     parent::__construct('album'); 

     // here your methods 
    } 

    protected function getTranslator() 
    { 
     return $this->translator; 
    } 
}