2017-03-06 9 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> 

(時間の一部に)Iは、フォームタイプの形式を指定しようとしたが、変化はなかったです。

テンプレート側にウィジェットのオプションがありますか?

ありがとうございます。

+0

私のEDIT#2をチェックしてみてください。 –

+0

日付フィルタで修正されないと思います。解決策がある場合は、フォームウィジェットまたはフォームタイプのオプションの選択肢だと思います。生成されたHTMLの説明が追加されました。 – Devatim

+0

私の編集#3を参照してください。私は少なくとも何らかの投票に値するのですか? –

答えて

0

the Twig date filterを試してみて、そのように先行ゼロなしで時間形式を指定します。

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

フォーマットはthe DateInterval.formatを使用して指定されています。私はそれがあなたのために働くはずだと思います。試してみてください。


EDIT#2

私はなぜあなたはそのエラーを取得しているかわかりません。たぶん、日付フィルタが間違った場所にあるからでしょうか?あなたはこれを試すことができます:

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

私はそれを修正するかどうかは分かりませんが、試してみてください。それがうまくいかない場合は、「日付」、「時」、「分」をHTML形式で表示する方法を教えてください。 DateTimeTypeフィールドの書式設定を使用できます。


EDIT#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, 
]) 

は、私はそれがあなたのために働くだろうと思います。


EDIT#4

だけでなく、これを試してみてください。

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

次に、ドロップダウンリストとして表示されます。あなたがなぜdate_widgetを使用していたのか不明ですか?

+0

動作していないようです。 'テンプレートのレンダリング中に例外がスローされました(「Catchable Fatal Error:クラスSymfony \ Component \ Form \ FormViewのオブジェクトを文字列に変換できませんでした」)。 – Devatim

+0

#3:既に試しました。私はまた範囲機能を試しました。ただし、先頭にゼロが表示されます。 – Devatim

関連する問題