Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否正在创建同名的zend form元素数组(ZF3)?_Php_Zend Framework3 - Fatal编程技术网

Php 是否正在创建同名的zend form元素数组(ZF3)?

Php 是否正在创建同名的zend form元素数组(ZF3)?,php,zend-framework3,Php,Zend Framework3,因为我必须在设计中定位复选框,所以我没有使用MultiCheckbox,而是在zend中使用Checkbox。我见过一些,但没有找到任何zf2或zf3解决方案 我的Php代码 $languages = new \Zend\Form\Element\Checkbox('languages[]'); $languages->setLabel('English'); $languages->setValue('1'); 这将产生以下输出 <?php echo $this-

因为我必须在设计中定位复选框,所以我没有使用MultiCheckbox,而是在zend中使用Checkbox。我见过一些,但没有找到任何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">
如何在不编写直接HTML代码的情况下添加更多使用名称语言[]的项目?

我的解决方案方法2

方法1: 以语言[1]而不是语言[]命名。通过使用它,我可以分别调用视图中的元素

创建表单

$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>
<?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>
视图文件

<div><?php echo $form->get('language[1]');?></div>
<div><?php echo $form->get('language[2]');?></div>
<?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>
您可以为此使用表单集合:

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]); ?>
您可以使用MultiChebox

它的工作原理类似于无线电表单元素。您的示例实现

use Zend\Form\Element;

$languages = new Element\MultiCheckbox('languages');
$languages->setLabel('Used languages');
$languages->setValueOptions([
    'en_US' => 'english',
    'de_DE' => 'german',
    'pl_PL' => 'polish',
]);
$languages->setValue('en_US'); //default value; you can use array

希望这个答案能帮助你多次渲染表单行:$this->formRow$form->get'languages[]@JannesBotis,但每个复选框的值都不同。您能告诉我如何添加下一种语言吗?如果您想为每个复选框使用不同的标签,请添加$collection->getElements[1]->setLabel'Spanish';它不起作用,而且调用$collection->getElements[1]时,我们已经在该位置检索到元素对象,因此setLabel可能不会更新变量$collection本身。