Php 是否正在创建同名的zend form元素数组(ZF3)?
因为我必须在设计中定位复选框,所以我没有使用MultiCheckbox,而是在zend中使用Checkbox。我见过一些,但没有找到任何zf2或zf3解决方案 我的Php代码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-
$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本身。