2017-03-06 49 views
1

formTypeSymfony2的form_widget日期時間:沒有前導零一個小時

->add("someday", DateTimeType::class, [ 
    "date_widget" => "single_text", 
    "minutes"  => ["00", "20", "40"], 
    "required" => true, 
]) 

模板

{{ form_widget(form.someday.date) }} 
{{ form_widget(form.someday.hour) }} 
{{ form_widget(form.someday.minute) }} 

生成的HTML(在小時部分)

<select id="form_someday_time_hour" name="form[someday][time][hour]"> 
    <option value="0">00</option> 
    <option value="1">01</option> 
    <option value="2">02</option> 
    <option value="3">03</option> 
    <option value="4">04</option> 
    <option value="5">05</option> 
    <option value="6">06</option> 
    <option value="7">07</option> 
    <option value="8">08</option> 
    <option value="9">09</option> 
    <option value="10">10</option> 
    <option value="11">11</option> 
    <option value="12">12</option> 
    <option value="13" selected="selected">13</option> 
    <option value="14">14</option> 
    <option value="15">15</option> 
    <option value="16">16</option> 
    <option value="17">17</option> 
    <option value="18">18</option> 
    <option value="19">19</option> 
    <option value="20">20</option> 
    <option value="21">21</option> 
    <option value="22">22</option> 
    <option value="23">23</option> 
</select> 

在這種情況下,前導零(00,01,02 ... 23), 小時選擇框,但我想改變這個選擇框沒有前導零(0,1,2 ... 23)。

我想生成這種格式的HTML。 (關於小時部分)

<select id="form_someday_time_hour" name="form[someday][time][hour]"> 
    <option value="0">0</option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
    <option value="4">4</option> 
    <option value="5">5</option> 
    <option value="6">6</option> 
    <option value="7">7</option> 
    <option value="8">8</option> 
    <option value="9">9</option> 
    <option value="10">10</option> 
    <option value="11">11</option> 
    <option value="12">12</option> 
    <option value="13" selected="selected">13</option> 
    <option value="14">14</option> 
    <option value="15">15</option> 
    <option value="16">16</option> 
    <option value="17">17</option> 
    <option value="18">18</option> 
    <option value="19">19</option> 
    <option value="20">20</option> 
    <option value="21">21</option> 
    <option value="22">22</option> 
    <option value="23">23</option> 
</select> 

我試圖指定形式類型的格式,但沒有改變。

在模板端會有小部件的選項嗎?

謝謝,如果你知道。

+0

檢查我的編輯#2,請嘗試它。 –

+0

我認爲它不會被日期過濾器修復。如果有解決方案,我認爲這是一個窗體小部件或表單類型選項的選項。已生成的HTML添加了說明。 – Devatim

+0

請參閱我的編輯#3。我至少應該得到某種投票嗎? –

回答

0

嘗試the Twig date filter並指定小時制,沒有前導零,像這樣:

{{ form_widget(form.someday.hour|date('h')) }} 

格式使用the DateInterval.format規定。我認爲這應該適合你。請嘗試。


編輯#2

我不知道爲什麼你得到這個錯誤。也許是因爲日期過濾器在錯誤的地方?你可以試試這個:

{{ form_widget(form.someday.hour)|date('h') }} 

我不確定這是否能解決它,但請嘗試一下。如果這不起作用,也許你可以告訴我你希望「日期」,「小時」和「分鐘」以HTML格式呈現(更新你的問題帖子以顯示);那麼也許我們可以使用DateTimeType字段的格式。


編輯#3

爲什麼不試試這則:

$hours = new array(); 

for ($i = 0; $i <= 23; $i++) { 
    array_push($hours, strval($i)); 
} 

... 
->add("someday", DateTimeType::class, [ 
    "date_widget" => "single_text", 
    "minutes"  => ["00", "20", "40"], 
    "hours"  => $hours, 
    "required" => true, 
]) 

我認爲這會爲你工作。


編輯#4

嘗試這一點。

->add("someday", DateTimeType::class, [ 
    "format" => "dd H mm", 
    "minutes"  => ["00", "20", "40"], 
    "required" => true, 
]) 

然後將顯示爲下拉列表。不知道你爲什麼使用date_widget ???

+0

它似乎沒有工作。 '在模板渲染期間拋出異常(「可捕獲的致命錯誤:類Symfony \ Component \ Form \ FormView的對象無法轉換爲字符串」)。 – Devatim

+0

#3:我已經試過了。我也嘗試了範圍函數。但是,會顯示前導零。 – Devatim

相關問題