由于我在设计中定位了复选框,因此我没有使用MultiCheckbox而是在zend中使用Checkbox。我见过一些zf1 solutions,但没有找到任何zf2或zf3解决方案。
我的Php代码
$languages = new \Zend\Form\Element\Checkbox('languages[]');
$languages->setLabel('English');
$languages->setValue('1');
这会产生以下输出
<?php
echo $this->formRow($form->get('languages[]'));
//It produce the following
?>
<input type="checkbox" name="languages[]" value="1" checked="checked">
如何添加名称为&#34;语言[]&#34;的更多项目?没有编写直接的HTML代码?
答案 0 :(得分:1)
您可以使用表单集:
1)在你的表格中:
use Zend\Form\Element\Collection;
...
$languages = new \Zend\Form\Element\Checkbox();
$languages->setLabel('English');
$languages->setValue('1');
$languages->setName('language');
$collection = new Collection();
$collection->setName('languages');
$collection->setLabel('Language Collection');
$collection->setCount(2);
$collection->setTargetElement($languages);
$collection->populateValues(array(
1, 0
));
$this->add($collection);
2)不要忘记在控制器操作中准备表单:
$form->prepare();
3)最后,在您的视图中,获取集合的所有元素并分别渲染它们:
<?php $elements = $form->get('languages')->getElements(); ?>
<?php //echo $this->formCollection($form->get('languages')); ?>
<?php echo $this->formRow($elements[0]); ?>
<?php echo $this->formRow($elements[1]); ?>
答案 1 :(得分:0)
我的解决方案(方法2)
方法1: 将名称命名为&#34;语言[1]&#34;而不是&#34;语言[]&#34;。通过使用它,我可以单独调用视图中的元素。
创建表单。
$language1 = new \Zend\Form\Element\Checkbox('language[1]');
$language2 = new \Zend\Form\Element\Checkbox('language[2]');
$form = new Form('Set');
$form->add($name)
->add($language1)
->add($language2)
->add($submit);
在视图文件
中<div><?php echo $form->get('language[1]');?></div>
<div><?php echo $form->get('language[2]');?></div>
编辑:方法2 使用fieldset
//Create form
$languages = [
['id' => 1, 'language' => 'English'],
['id' => 2, 'language' => 'Malayalam'],
] ;
$fieldSet = new \Zend\Form\Fieldset('languages') ;
foreach( $languages as $one ) {
$c = new \Zend\Form\Element\Checkbox($one['id']);
$c->setLabel($one['language']) ;
$fieldSet->add($c) ;
}
//Add collection of checkboxes to form
$form->add($fieldSet) ;
在视图文件
中<?php
$language = $form->get('languages') ;
?>
<div class="form-group row">
<label class="control-label col-sm-2" >Choose Languages</label>
<div class="col-sm-10">
<?php foreach($language as $one ) { ?>
<?php echo $this->formCheckbox($one); ?> <span> <?php echo $this->formLabel( $one ) ; ?> </span>
<?php echo $this->formElementErrors($one); ?>
<?php } ?>
</div>
</div>
答案 2 :(得分:0)
您可以使用 MultiChebox
https://framework.zend.com/manual/2.2/en/modules/zend.form.element.multicheckbox.html
它类似于 radio 表单元素。您的示例实现
te