2015-04-28 6 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"> 

My des IRED выход

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

ответ

1

У вас есть два варианта: а) Backend: Атрибуты массив должен содержать «значение» набор к единственному элементу из значений, доступных, это способ автоматической проверки ввода радио , С вашим примером, было бы:

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

б) Спереди: Использование JQuery для проверки ввода радио. Вы можете сделать это с:

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

Мне нравится вариант «a». Но как установить поле «значение» с запросом базы данных? –

+0

Перед построением всей формы вы должны запросить базу данных, чтобы получить нужное значение. Затем вы можете передать это значение конструктору формы для обновления частного атрибута (например, original_language_iso_value), с этого момента он будет доступен для любого метода внутри класса, поэтому вы вызываете заданное значение как «значение» => $ this-> original_language_iso_value – Conti