ZF2如何使用自定义表单元素设置<input type =“radio”checked =“”/>

时间:2015-04-28 02:21:24

标签: forms zend-framework2 checked custom-element

如何在表单输入无线电字段中设置已选中?使用自定义表单元素添加此表单字段。该字段的值不一致。

我的自定义表单元素返回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**>

1 个答案:

答案 0 :(得分:1)

您有两种选择: a)后端: 属性数组必须包含&#39;值&#39;设置为可用值的唯一元素,这是自动检查无线电输入的方式。举个例子,它将是:

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