2014-12-10 62 views
0

爲什麼這個代碼產生具有雙數組鍵名的形式輸入字段示於下面的HTML輸出從代碼表單輸入產生用於字段名稱雙鍵名CakePHP中

echo $this->Form->input(
            'year', array(
           'div' => false, 
           'id' => 'year', 
           'label' => false, 
           'type' => 'date', 
           'dateFormat' => 'Y', 
           'minYear' => date('Y') - 30, 
           'maxYear' => date('Y') + 1, 
           'selected' => date('Y-m-d', strtotime('+1 month')), 
            ) 
          ); 

HTML輸出上述

<label class="select"> 
    Year  <select name="data[InvoiceRun][year][year]" id="yearYear"> 
<option value="2015" selected="selected">2015</option> 
<option value="2014">2014</option> 
<option value="2013">2013</option> 
<option value="2012">2012</option> 
.......... 
</select> 
</label> 

回答

1

這是因爲您已將輸入類型選爲「日期」。 「日期」通常會進行日,月,年的選擇,所以即使您已將其格式化爲只有年份輸入,它仍然表現得好像會有其他輸入一樣。

如果你看看食譜,在http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#field-naming-conventions

表單助手使用了幾個領域的後綴爲內部日期時間輸入 創作。如果您正在使用命名的年,月,日,時域, 分鐘,或經絡且得到正確的輸入問題,您 可以設置name屬性來覆蓋缺省行爲:

echo $this->Form->input('Model.year', array(
    'type' => 'text', 
    'name' => 'data[Model][year]' 
)); 

所以換句話說,下面應該工作:

echo $this->Form->input(
    'year', array(
      'name' => 'data[InvoiceRun][year]', //new setting 
      'div' => false, 
      'id' => 'year', 
      'label' => false, 
      'type' => 'date', 
      'dateFormat' => 'Y', 
      'minYear' => date('Y') - 30, 
      'maxYear' => date('Y') + 1, 
      'selected' => date('Y-m-d', strtotime('+1 month')), 
    ) 
); 

如果沒有,那麼另一種選擇是創建輸入類型「選擇」,而是和重建基礎上,今年一年的選項。