25

如何doctrine_orm_datetime_range在使用 jQuery UI 日期选择器的 Sonata Admin Bundle 中创建过滤器?

我尝试了以下方法,但它不起作用:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper
        ->add('datumUitgevoerd', 'doctrine_orm_datetime', array('widget' => 'single_text'), null, array('required' => false,  'attr' => array('class' => 'datepicker')))
    ;
}
4

5 回答 5

67

不再需要使用自定义日期选择器。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]);
    }

旧答案

要使用 datePickerdoctrine_orm_datetime使用此代码:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper->add('datumUitgevoerd', 'doctrine_orm_datetime', array(), null, array('widget' => 'single_text', 'required' => false,  'attr' => array('class' => 'datepicker')));
}

或者在代码中使用 datePickerdoctrine_orm_datetime_range应该如下所示:

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" ]);
 });
于 2013-02-16T11:07:00.773 回答
13

我知道这是个老话题,但无论如何它对我有点帮助,所以也许它会在未来帮助别人。

我找到了一种为 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 中。

于 2016-06-06T15:41:26.560 回答
5

如果您需要 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,
    ]);
}
于 2019-09-20T11:53:50.450 回答
4

对于奏鸣曲 3,您必须使用 @SonataForm 而不是 @SonataCore:

# config/packages/twig.yml
twig:
    form_themes:
        - '@SonataForm/Form/datepicker.html.twig'
于 2020-08-13T12:48:33.060 回答
3

在 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,
    ]);
}
于 2019-01-18T09:36:09.063 回答