Zend Framework 2如何在视图脚本中获取单个单选按钮?

时间:2013-09-21 09:16:55

标签: zend-framework2

我正在使用Twitter Bootstrap 3.单选按钮的Html代码应如下所示:

<div class="radio">
    <label>
        <input type="radio" name="search_text_source" value="title" />
        In the title
    </label>
</div>
<div class="radio">
    <label>
        <input type="radio" name="search_text_source" value="content" />
        In the content
    </label>
</div>
...

在表单中,我按如下方式创建单选按钮:

$this->add(array(
    'name' => 'search_text_source',
    'type' => 'radio',
    'options' => array(
        'value_options' => array(
            'title' => 'In the title',
            'content' => 'In the content',
            'description' => 'In the description',
        ),
    ),  
));

如何在视图脚本中单独显示每个单选按钮?

P.S。:或任何决定,它将使用表格创建类似HTML代码。

编辑:

感谢Sam想通了。但是我会将这些变体留给更复杂的情况。在实验过程中,发生了以下情况(使用标准视图助手):

// in view script:
<?
    $this->formRadio()->setSeparator('</div><div class="radio">');
?>

<!-- some html -->

<div class="radio">
    <?php echo $this->formRadio($form->get('search_text_source')) ?>
</div>

再次感谢Sam的帮助,没有他,我不明白。

2 个答案:

答案 0 :(得分:4)

有没有人读过the documentation?甚至还有一个专门的章节Zend\Form\View\Helper - 课程,应该回答你的所有问题。

此外,由于您可能想要所有表单元素的TB3样式,您可能对one of the many, many TB-Modules

感兴趣

//编辑

我没有看到文档没有回答你的问题:SI认为formRadio() viewHelper的默认输出是你正在寻找的,所以你需要的只是一个单独的div,对吗?

// any.phtml
<?=$this->form()->openTag($form);?>
<div class="radio">
    <?=$this->formRadio($form->get('radio1')); ?>
</div>
<?=$this->form()->closeTag();?>

// Edit2

当然,您总是可以选择编写自己的formRadio() ViewHelper,为您写出div。有一个easy to find SO Question, just for this very topic可用。

// Edit3

对于态度感到内疚,你的ViewHelper可能就像这样简单:

// Application\Form\View\Helper\FormRadio.php
namespace Application\Form\View\Helper;

use Zend\Form\View\Helper\FormRadio as OriginalFormRadio;

class FormRadio extends OriginalFormRadio
{
    protected function renderOptions(/* include original attributes here */)
    {
        // Include 100% of Original FormMultiCheckbox Code
        // https://github.com/zendframework/zf2/blob/master/library/Zend/Form/View/Helper/FormMultiCheckbox.php#L147

        // Now change this one line #227 into your code
        // Instead of: https://github.com/zendframework/zf2/blob/master/library/Zend/Form/View/Helper/FormMultiCheckbox.php#L227
        $template = '<div class="radio">' . $labelOpen . '%s%s' . $labelClose . '</div>';
    }
}

然后你必须覆盖默认的ViewHelper

// Inside Module Class
public function getViewHelperConfig()
{
    return array(
        'invokables' => array(
            'formradio' => 'Application\Form\View\Helper\FormRadio'
        )
    );
}

附加信息:在此示例中,我覆盖原始formRadio,而不是formMultiCheckbox。这是因为我想TB3会有一个不同的CSS类来渲染Checkbox而不是Radio元素。

答案 1 :(得分:1)

我的解决方案是:

<强>形式:

$this->add(array(
'type'  => 'radio',
'name'  => 'gender',
'options' => array(
    'label' => 'Gender',
    'value_options' => array(
        'female' => array(
            'value' => '1',
         ),
         'male' => array(
             'value' => '2',

         ),
     ),
 ),));

查看:

<div class="form-group">
<?php
$form->get('gender')->setLabelAttributes(array('class' => 'col-sm-4'));
echo $this->formLabel($form->get('gender'));
?>
<div class="col-lg-8">
    <?php
    $element = $form->get('gender');
    $options = $element->getOptions();
    $options = $options['value_options'];
    ?>
    <div class="rdio rdio-primary">
        <input id="female" type="radio" <?php if ($element->getValue() == $options['female']['value']) echo 'checked="checked"' ?> name="<?php echo $element->getName() ?>" value="<?php echo $options['female']['value'] ?>">
        <label for="female">Female</label>
    </div>
    <div class="rdio rdio-primary">

        <input id="male"  type="radio" <?php if ($element->getValue() == $options['male']['value']) echo 'checked="checked"' ?> name="<?php echo $element->getName() ?>" value="<?php echo $options['male']['value'] ?>">
        <label for="male">Male</label>
    </div>
</div>

有关详细信息,您可以学习以下代码: ZF2 rendering individual radio elements with helpers