Sonata Admin Bundle:DatePicker 范围
Posted
技术标签:
【中文标题】Sonata Admin Bundle:DatePicker 范围【英文标题】:Sonata Admin Bundle: DatePicker range 【发布时间】:2013-01-04 19:09:14 【问题描述】:如何在使用 jQuery UI 日期选择器的 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')))
;
【问题讨论】:
【参考方案1】:对于Sonata 3,您必须使用@SonataForm 而不是@SonataCore:
# config/packages/twig.yml
twig:
form_themes:
- '@SonataForm/Form/datepicker.html.twig'
【讨论】:
【参考方案2】:如果您需要 Symfony 4 中的日期时间范围过滤器
你可以使用:
# config/packages/twig.yml
twig:
form_themes:
- '@SonataCore/Form/datepicker.html.twig'
注意:对于奏鸣曲3,您必须使用:
# config/packages/twig.yml
twig:
form_themes:
- '@SonataForm/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,
]);
【讨论】:
【参考方案3】:不再需要使用自定义日期选择器。 Sonata 包含原生日期时间选择器,可与 Twitter Boostrap 配合使用。
要激活日期时间选择器表单字段,您必须启用加载包含相关代码的树枝模板。
配置
对于 Symfony 4:
# config/packages/twig.yaml
twig:
# ...
form_themes:
- '@SonataCore/Form/datepicker.html.twig'
对于 Symfony 3:
# app/config/config.yml
twig:
# ...
form_themes:
- 'SonataCoreBundle:Form:datepicker.html.twig'
对于 Symfony 2:
# app/config.yml:
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。
#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" ]);
);
【讨论】:
我按照您的指示进行操作,一切正常,直到我点击“过滤器”按钮。我收到日期字段“此值无效”的验证错误。我目前正在做的一件事不同的是我正在使用'input_type' => 'timestamp'
,除此之外是相同的。默认的 date_range 小部件对我来说很好用。任何想法为什么?
我的问题的关键是设置正确的格式:'format' => 'M/d/y'
看来这个解决方案不再适用于 Symfony 2.6 ... 但是:$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'))]);
对我有用!【参考方案4】:
在 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,
]);
【讨论】:
当我们在任何日期过滤某些数据时,这无法正常工作,过滤器已被删除。【参考方案5】:我知道这是个老话题,但无论如何它对我有点帮助,所以也许它会在未来帮助别人。
我找到了一种为 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。
【讨论】:
正是我想要的,您只需要将日期选择器的模板也添加到配置文件中。 愿意使用doctrine_orm_datetime_range
的用户,格式为'format' => 'yyyy-MM-dd HH:mm:ss'
。以上是关于Sonata Admin Bundle:DatePicker 范围的主要内容,如果未能解决你的问题,请参考以下文章
sonata-project/user-bundle dev-master 与 sonata-project/doctrine-orm-admin-bundle 冲突