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

相关问题