如何在使用jQuery UI datepicker的Sonata Admin Bundle中创建doctrine_orm_datetime_range
过滤器?
我尝试了以下操作,但它不起作用:
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('datumUitgevoerd', 'doctrine_orm_datetime', array('widget' => 'single_text'), null, array('required' => false, 'attr' => array('class' => 'datepicker')))
;
}
答案 0 :(得分:59)
如果您使用的是3. * Symfony,则必须使用以下树枝配置:
# app/config/config.yml
twig:
# ...
form_themes:
- 'SonataCoreBundle:Form:datepicker.html.twig'
不再需要使用自定义日期选择器。 Sonata包含原生日期时间选择器,适用于Twitter Boostrap。
要激活日期时间选择器表单字段,您必须在app / config.yml中的树枝表单资源中添加SonataCoreBundle:Form:datepicker.html.twig
:
twig:
# ...
form:
resources:
- 'SonataCoreBundle:Form:datepicker.html.twig'
您可以使用表单中的选择器:
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('createdAt', 'sonata_type_date_picker');
}
日期时间过滤器中的:
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('createdAt', 'doctrine_orm_datetime', array('field_type'=>'sonata_type_datetime_picker',));
}
或作为日期时间范围过滤器:
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('createdAt', 'doctrine_orm_datetime_range', array('field_type'=>'sonata_type_datetime_range_picker',));
}
要在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。
#File app/config.yml
sonata_admin:
title: Admin
title_logo: /logo_admin.png
templates:
layout: AcmeDemoBundle::standard_layout.html.twig
#...another Sonata and Symfony settings...
{# File src/Acme/Bundle/DemoBundle/Resources/views/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 %}
//File web\bundles\acmedemo\js\jquery_admin.js
jQuery(document).ready(function(){
jQuery.datepicker.setDefaults( jQuery.datepicker.regional[ "" ] );
jQuery(".datepicker").datepicker( jQuery.datepicker.regional[ "en" ]);
});
答案 1 :(得分:10)
我知道这是一个古老的话题,但无论如何它对我有所帮助,所以也许这对未来的某些人有帮助。
我找到了为datepicker设置日期格式的方法:
$datagridMapper->add('createdAt', 'doctrine_orm_date_range', [
'field_type'=>'sonata_type_date_range_picker',
'field_options' => [
'field_options' => [
'format' => 'yyyy-MM-dd'
]
]
]);
默认情况下,在Sonata \ CoreBundle \ Form \ Type \ DatePickerType中设置格式参数。
答案 2 :(得分:1)
在Symfony 4中,我必须对日期时间过滤器执行以下操作:
# config/packages/twig.yml
twig:
form_themes:
- '@SonataCore/Form/datepicker.html.twig'
在我的管理类中,我必须像这样配置过滤器:
use Sonata\CoreBundle\Form\Type\DateTimePickerType;
...
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
$datagridMapper->add('createdAt', 'doctrine_orm_datetime', [
'field_type'=> DateTimePickerType::class,
]);
}
答案 3 :(得分:1)
如果您需要在Symfony 4中使用日期时间范围过滤器
您可以使用:
# config/packages/twig.yml
twig:
form_themes:
- '@SonataCore/Form/datepicker.html.twig'
管理类:
use Sonata\CoreBundle\Form\Type\DateTimeRangePickerType;
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
$datagridMapper->add(
'createdAt',
'doctrine_orm_datetime_range', [
'field_type'=> DateTimeRangePickerType::class,
]);
}
答案 4 :(得分:1)
对于 Sonata 3 ,您必须使用@SonataForm而不是@SonataCore:
# config/packages/twig.yml
twig:
form_themes:
- '@SonataForm/Form/datepicker.html.twig'