2012-09-28 107 views
0

在Zend框架2,當我使用視圖的formRow方法,像這樣Zend框架2的formInput或formElement ID標籤不渲染

$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')); 

我不明白,標識牌

<input type="" name="product_name"> 

我試着用formElement相同的結果。

我怎樣才能讓它呈現所有屬性和值的輸入?

這是我Zend框架2查看的樣子(簡化)

<?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框架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

當前Zend 2不會生成這樣的表格............. – user457015

回答

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', 
     ), 
    )); 
+0

ahhh當然!! ......謝謝羅! –

3

其實這個代碼:

$this->add(array(
     'type' => 'Zend\Form\Element\Text', 
     'name' => 'product_name', 
     'attributes' => array(
      'id' => 'product_name', 
      'class' => 'span3', 
     ), 
     'options' => array(
      'label' => 'Your label',    
     ), 
    )); 

能正確利用CSS渲染像引導來使用,由於事實$this->formRow(...)形式助手將產生:

<label for="product_name">Your label</label><input type="text" name="product_name" class="span3" id="product_name" value=""> 

這比原始formRow輸出更可讀(沒有id都沒有類屬性)