在Zend框架2中,当我使用视图的 formRow 方法时,
$this->formRow($form->get('product_name'));
它会像这样生成HTML
<label for="product_name">
<span>Name</span>
<input type="text" id="product_name" name="product_name">
</label>
但如果我使用 formInput
<div class="control-group">
<?php echo $this->formLabel($form->get('product_name')->setLabelAttributes(array('class'=>'control-label'))); ?>
<div class="controls">
<?php echo $this->formInput($form->get('product_name')); ?>
</div>
</div>
$this->formInput($form->get('product_name'));
我没有得到id标签
<input type="" name="product_name">
我尝试过使用相同结果的formElement。
如何让它只使用所有属性和值呈现输入?
这就是我的 Zend Framework 2 View 的样子(简化)
<?php echo $this->form()->openTag($form); ?>
<div class="control-group">
<?php echo $this->formLabel($form->get('product_name')->setLabelAttributes(array('class'=>'control-label'))); ?>
<div class="controls"><?php echo $this->formInput($form->get('product_name')); ?></div>
</div>
<div class="control-group">
<div class="controls"><?php echo $this->formSubmit($form->get('submit')); ?></div>
</div>
<?php echo $this->form()->closeTag(); ?>
和 Zend Framework 2表单
<?php
namespace Product\Form;
use Zend\Form\Form;
class ProductForm extends Form
{
public function __construct($name = null)
{
// we want to ignore the name passed
parent::__construct('product');
$this->setAttribute('method', 'post');
$this->setAttribute('class','form-horizontal');
$this->add(array(
'name' => 'product_name',
'attributes' => array(
'type' => 'text',
),
'options' => array(
'label' => 'Name',
),
));
$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'value' => 'Save',
'id' => 'submitbutton',
'class'=>'btn btn-success btn-large'
),
));
}
}
?>
答案 0 :(得分:4)
变化:
$this->add(array(
'name' => 'product_name',
'attributes' => array(
'type' => 'text',
),
'options' => array(
'label' => 'Name',
),
));
为:
$this->add(array(
'name' => 'product_name',
'attributes' => array(
'type' => 'text',
'id' => 'product_name',
),
'options' => array(
'label' => 'Name',
),
));
答案 1 :(得分:3)
实际上这段代码:
$this->add(array(
'type' => 'Zend\Form\Element\Text',
'name' => 'product_name',
'attributes' => array(
'id' => 'product_name',
'class' => 'span3',
),
'options' => array(
'label' => 'Your label',
),
));
可以由像Bootstrap这样的CSS渲染器正确使用,因为$this->formRow(...)
表单助手会生成:
<label for="product_name">Your label</label><input type="text" name="product_name" class="span3" id="product_name" value="">
比原始formRow
输出更可读(没有id既没有类属性)