2017-03-06 1 views
1

FormtypeSymfony2 form_widget Datumzeit: eine Stunde ohne führende Nullen

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

template

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

erzeugten HTML (auf Stunde Teil)

<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> 

In diesem Fall, wählen Sie die Stunde mit den führenden Nullen (00, 01, 02 ... 23), , aber ich möchte diese Auswahlbox ohne führende Nullen (0, 1, 2 ... 23) ändern.

Ich möchte HTML dieses Formats generieren. (Auf Stundenteil)

<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> 

Ich habe versucht, das Format, in dem Formulartyp angibt, aber es gab keine Änderung.

Wird es Optionen für das Widget auf der Vorlagenseite geben?

Danke, wenn Sie wissen.

+0

Überprüfen Sie meine EDIT # 2, versuchen Sie es bitte. –

+0

Ich denke, dass es nicht mit dem Datumsfilter behoben wird. Wenn es eine Lösung gibt, denke ich, dass es eine Option für Formular-Widget oder Formulartyp ist. Es wurde eine Beschreibung des generierten HTML hinzugefügt. – Devatim

+0

Siehe meine EDIT # 3. Verdiene ich zumindest eine Art Abstimmung? –

Antwort

0

the Twig date filter Versuchen und die Stunden-Format ohne führende Nullen angeben wie folgt:

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

Formate angegeben mit the DateInterval.format. Ich denke, das sollte für dich funktionieren. Versuch es bitte.


EDIT # 2

Ich bin mir nicht sicher, warum Sie diesen Fehler bekommen. Vielleicht liegt es daran, dass der Datumsfilter an der falschen Stelle ist? Können Sie das versuchen:

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

Ich bin mir nicht sicher, ob das es beheben wird, aber bitte versuchen Sie es. Wenn das nicht funktioniert, können Sie mir vielleicht sagen, wie Sie "Datum", "Stunde" und "Minute" im HTML-Format darstellen möchten (aktualisieren Sie Ihre Frage, um das zu zeigen); Dann können wir vielleicht die Formatierung des DateTimeType-Feldes verwenden.


EDIT # 3

Warum dies nicht, dann versuchen:

$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, 
]) 

denke ich, dass die Arbeit für Sie.


EDIT # 4

Versuchen Sie dies auch.

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

Dann wird als Dropdown-Listen angezeigt. Nicht sicher, warum Sie date_widget verwendeten ???

+0

Es scheint nicht zu funktionieren. 'Eine Ausnahme wurde beim Rendern einer Vorlage ausgelöst (" Abnehmbarer schwerer Fehler: Objekt der Klasse Symfony \ Component \ Form \ FormView konnte nicht in eine Zeichenfolge konvertiert werden ").' – Devatim

+0

# 3: Ich habe es bereits versucht. Ich habe auch die Bereichsfunktion ausprobiert. Die führende Null wird jedoch angezeigt. – Devatim

Verwandte Themen