创建具有相同名称(ZF3)的zend表单元素数组?

时间:2017-11-09 10:45:20

标签: php zend-framework3

由于我在设计中定位了复选框,因此我没有使用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代码?

3 个答案:

答案 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