【问题标题】:Sonata Admin Bundle: DatePicker rangeSonata Admin Bundle:DatePicker 范围
【发布时间】: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')))
    ;
}

【问题讨论】:

    标签: datepicker symfony-2.1 jquery-ui-datepicker symfony-sonata sonata-admin


    【解决方案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' =&gt; 'timestamp',除此之外是相同的。默认的 date_range 小部件对我来说很好用。任何想法为什么?
        • 我的问题的关键是设置正确的格式:'format' =&gt; 'M/d/y'
        • 看来这个解决方案不再适用于 Symfony 2.6 ... 但是:$datagridMapper-&gt;add('expirationDate','doctrine_orm_date_range',['field_type' =&gt; 'sonata_type_date_range' , 'field_options'=&gt; array('widget' =&gt; 'single_text', 'required' =&gt; false, 'attr' =&gt; array('class' =&gt; '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' =&gt; 'yyyy-MM-dd HH:mm:ss'
        猜你喜欢
        • 2018-07-11
        • 2016-06-11
        • 2016-09-03
        • 2017-09-02
        • 2015-01-29
        • 2018-01-27
        • 1970-01-01
        • 1970-01-01
        • 2016-04-20
        相关资源
        最近更新 更多