2015-04-28 40 views
0

如何設置選中在表格輸入無線電領域?此表單字段是使用自定義表單元素添加的。該字段的值不一致。ZF2如何使用自定義表單元素設置<input type ='radio'CHECKED>

我的自定義表單元素返回1個元素。這是一個無線電輸入字段。每次提交表單時,我都需要對其進行檢查。我使用這個而不是「隱藏」字段的原因是讓用戶看到這個設置。

這是自定義表單元素

namespace Member\Form\Element; 

use Doctrine\ORM\EntityManager; 
use Zend\Form\Element\Radio; 

/** 
* Class OriginalLanguageIsoRadio 
* 
* @package Member\Form\Element 
*/ 
class OriginalLanguageIsoRadio extends Radio 
{ 
    /** 
    * @var EntityManager $entityManager 
    */ 
    protected $entityManager; 

    /** 
    * @var string $translationKey 
    */ 
    protected $translationKey; 

    /** 
    * @var string $textDomain 
    */ 
    protected $textDomain; 

    /** 
    * @param EntityManager $entityManager 
    * @param string $translationKey 
    * @param string $textDomain 
    */ 
    public function __construct(
     EntityManager $entityManager, 
     $translationKey, 
     $textDomain 
    ) 
    { 
     $this->entityManager = $entityManager; 

     $this->translationKey = $translationKey; 

     $this->textDomain = $textDomain; 
    } 

    /** 
    * Get Value Options 
    * 
    * @return array 
    * 
    * @throws \Exception 
    */ 
    public function getValueOptions() 
    { 
     $array = []; 

     $query = $this->entityManager 
      ->createQueryBuilder() 
      ->from(
       'AMDatabase\Entity\TheVerse\TranslationsMasters', 
       't' 
      ) 
      ->select('t.languageIso') 
      ->setMaxResults(1); 

     $result = $query->getQuery() 
         ->getArrayResult(); 

     if (is_array($result) && count($result) > '0') { 
      foreach ($result AS $value) { 
       if ($value['languageIso'] == '') { 
        $array['Global'] = $value['Global']; 
       } else { 
        $array[$value['languageIso']] = $value['languageIso']; 
       } 
      } 
     } 

     return $array; 
    } 

}

然後我調用自定義表單元素:

/** 
* Original Language Iso 
*/ 
$this->add(
    [ 
     'type'  => 'Member\Form\Element\OriginalLanguageIsoRadio', 
     'name'  => 'original_language_iso', 
     'options' => [ 
      'label' => 'original_language_iso' 
     ], 
     'attributes' => [ 
      'id' => 'original_language_iso', 
     ] 
    ] 
); 

這會將以下到我的表格:

<input type="radio" name="original_language_iso" id="original_language_iso" value="en-US"> 

我的des IRED輸出

<input type="radio" name="original_language_iso" id="original_language_iso" value="en-US" **checked**> 

回答

1

你有兩種選擇: 一)後端: 屬性數組必須包含一個「值」設置爲可用值的唯一元素,這就是方法自動檢查無線電輸入。隨着你的榜樣,那就是:

$this->add(
    [ 
     'type'  => 'Member\Form\Element\OriginalLanguageIsoRadio', 
     'name'  => 'original_language_iso', 
     'options' => [ 
      'label' => 'original_language_iso' 
     ], 
     'attributes' => [ 
      'id' => 'original_language_iso', 
      'value'=>'something_here' 
     ] 
    ] 
); 

B)前: 使用jQuery檢查無線電輸入。你可以這樣做:

jQuery('#original_language_iso').attr('checked','checked'); 
+0

我喜歡選項「a」。但是,如何使用數據庫查詢設置「值」字段? –

+0

在構建整個表單之前,您應該針對數據庫進行查詢以獲取所需的值。然後你可以將這個值傳遞給窗體構造函數來更新一個私有屬性(例如original_language_iso_value),從那個時候它可以用於類內部的任何方法,所以你調用set value「value」=> $這個 - > original_language_iso_value – Conti

相關問題