ZF2 Как установить ‹input type='radio' CHECKED› с пользовательским элементом формы

Как установить 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">

Мой желаемый результат

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

person Ron Piggott    schedule 28.04.2015    source источник


Ответы (1)


У вас есть два варианта: a) 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');
person Conti    schedule 28.04.2015
comment
Мне нравится вариант а. Но как установить поле значения с помощью запроса к базе данных? - person Ron Piggott; 28.04.2015
comment
Перед созданием всей формы вы должны запросить базу данных, чтобы получить необходимое вам значение. Затем вы можете передать это значение конструктору формы для обновления частного атрибута (в данном случае, например, original_language_iso_value), с этого момента оно будет доступно для любого метода внутри класса, поэтому вы вызываете установку значения, например value=›$this -›original_language_iso_value - person Conti; 29.04.2015