Sonata-admin 表单中的时间选择器(无日期)

Time picker (no date) in a Sonata-admin form

作为将整个项目升级到 Symfony 2.7 的一部分,我正在将 Symfony 项目的 Sonata Admin 使用从 Sonata-Admin 2.2 升级到 2.3。

我们有许多 'time' 字段(即在 Doctrine 中定义为 "time",没有有意义的日期部分。)

在 Sonata-Admin 2.2 中,FormMapper 的定义很简单:

$formMapper
   ->tab('tab.general')
   ->add('start', null, array('label' => 'label.start')
   ->end()

这给出了 "half-form-width" 小时和分钟选择框的布局,并排的形式为:

但是 Sonata-Admin 2.3 显示了整整两行:

不太好用。

那么,我应该如何设置才能获得相同的渲染效果?

我试过使用 'sonata_type_datetime_picker' 但它确实坚持显示日期。这些字段没有日期。挑个时间好像没有等价物。

有同样的问题并通过添加我自己的 CSS 覆盖文件解决了这个问题。

1) 添加 class 到您的表单字段

->add('start', 'time', array(
    'attr' => array('class' => 'fixed-time')
))

2) 在 Resources/public/css/override.css 下的包中创建一个新的 CSS 文件,并由 [ 覆盖=37=]class

例如:

.fixed-time .select2-container {
    width: auto !important;
}

3) 然后在你的包中某处 (Resources/views) 创建一个名为 standard_layout.html.twig 的新模板并覆盖 Sonata 模板 + 添加新创建的 CSS 文件(记得调用 parent()首先,先加载奏鸣曲代码)。

{% extends 'SonataAdminBundle::standard_layout.html.twig' %}

{% block stylesheets %}
    {{ parent() }}
    <link rel="stylesheet" href="{{asset('bundles/yourbundle/css/override.css')}}" type="text/css" media="all"/>
{% endblock %}

4) 然后将您的 standard_layout twig 模板注册到 Sonata admin 中(在您的 config.yml 中)。

sonata_admin:
    templates:
        layout: YourBundle::standard_layout.html.twig

不要忘记安装新资产 (assets:install) 和清除缓存(从 app/cache 中删除所选文件夹),否则您将看不到任何变化。