现在不再需要使用自定义日期选择器。Sonata包含原生的日期时间选择器,与Twitter Boostrap良好兼容。
要激活日期时间选择器表单字段,您必须启用包含相关代码的twig模板的加载。
配置
对于Symfony 4:
twig:
form_themes:
- '@SonataCore/Form/datepicker.html.twig'
对于 Symfony 3:
twig:
form_themes:
- 'SonataCoreBundle:Form:datepicker.html.twig'
对于 Symfony 2:
twig:
form:
resources:
- 'SonataCoreBundle:Form:datepicker.html.twig'
使用方法
您可以在表单定义中使用选择器:
use Sonata\CoreBundle\Form\Type\DatePickerType;
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('createdAt', DatePickerType::class);
}
在日期时间筛选器中:
use Sonata\CoreBundle\Form\Type\DatePickerType;
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('createdAt', 'doctrine_orm_datetime', ['field_type'=> DatePickerType::class]);
}
或者作为日期时间范围过滤器:
use Sonata\CoreBundle\Form\Type\DateTimeRangePickerType;
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('createdAt', 'doctrine_orm_datetime_range', ['field_type'=> DateTimeRangePickerType::class]);
}
旧答案
要在doctrine_orm_datetime
中使用datePicker,请使用以下代码:
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper->add('datumUitgevoerd', 'doctrine_orm_datetime', array(), null, array('widget' => 'single_text', 'required' => false, 'attr' => array('class' => 'datepicker')));
}
或者在doctrine_orm_datetime_range
中使用datePicker,代码应该如下所示:
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper->add('datumUitgevoerd', 'doctrine_orm_datetime_range', array(), null, array('widget' => 'single_text', 'required' => false, 'attr' => array('class' => 'datepicker')));
}
你需要重载主模板以添加你的自定义 JavaScript 文件来初始化 DatePicker。
sonata_admin:
title: Admin
title_logo: /logo_admin.png
templates:
layout: AcmeDemoBundle::standard_layout.html.twig
{% extends 'SonataAdminBundle::standard_layout.html.twig' %}
{% block javascripts %}
{{ parent() }}
<script src="{{ asset('bundles/acmedemo/js/jquery_admin.js') }}" type="text/javascript"></script>
{% endblock %}
jQuery(document).ready(function(){
jQuery.datepicker.setDefaults( jQuery.datepicker.regional[ "" ] );
jQuery(".datepicker").datepicker( jQuery.datepicker.regional[ "en" ]);
});
'input_type' => 'timestamp'
,除此之外都相同。默认的 date_range 小部件对我来说完全正常。有什么想法吗? - Onema'format' => 'M/d/y'
。 - Onema$datagridMapper->add('expirationDate','doctrine_orm_date_range',['field_type' => 'sonata_type_date_range' , 'field_options'=> array('widget' => 'single_text', 'required' => false, 'attr' => array('class' => 'datepicker'))]);
对我很有帮助! - Steven