使用jquery timepicker持续时间与symfony

时间:2014-11-26 14:55:22

标签: javascript php jquery symfony timepicker

我正在努力让jquery timepicker与symfony一起工作。

在我的表格中,我有:

    ->add('workingDuration', 'datetime', array(
            'label'=>'Temps de travail',
            'required' => false,
            'widget' => 'single_text',
            'attr'=>array
            (
                'class'=>'timepicker'
            )))

在我的javascript中有一个简单的$(' .timpicker')。timepicker()。

但我有以下问题: - 如果我的数据库字段类型是'时间',我得到

 'Error: Call to a member function format() on a non-object'
public function convertToDatabaseValue($value, AbstractPlatform $platform)
    {
        return ($value !== null)
            ? $value->format($platform->getTimeFormatString()) : null;
    }
  • 如果我的表单字段属于'时间',则时间戳不会启动
  • 如果数据库字段是datetime类型,以及表单类型,我有一个存储到数据库的完整日期,当读回这个元素时,timepicker插件无法识别格式并且无法正常启动。 / LI>

我该怎么做才能让它发挥作用。实际上我期待只存储一段短暂的时间,因此需要时间戳。

2 个答案:

答案 0 :(得分:0)

http://www.sql.org/sql-database/postgresql/manual/datatype-datetime.html

time [ (p) ] [ without time zone ]  times of day only   8 bytes     00:00:00.00     23:59:59.99     1 microsecond
time [ (p) ]     with time zone     times of day only   12 bytes    00:00:00.00+12  23:59:59.99-12  1 microsecond

方法->format()适用于 DateTime 对象。 (见http://php.net/manual/en/datetime.format.php

从"时间"更改 workingDuration 字段的实体/文档类型到" 日期时间" (http://symfony.com/doc/current/reference/forms/types/datetime.html

答案 1 :(得分:0)

好吧,我终于想通了回答困境。

基本上,我需要将时间/字符串转换为日期时间对象,反之亦然,以便使jquery插件时间选择器能够存储持续时间。

答案是:

  1. 在数据库中使用时间:* @ORM \ Column(type =“time”,nullable = true)
  2. 创建一个数据Transformer,它将datetime对象转换为时间字符串,反之亦然:

    命名空间AppBundle \ Form \ DataTransformer;

    使用Symfony \ Component \ Form \ DataTransformerInterface;

    class DateTimeToDurationTransformer实现DataTransformerInterface

    {     / **      * @param混合$ dateTime      * @internal param混合$ value      * @return字符串      * /     公共函数变换($ dateTime)     {         if(null === $ dateTime){             返回“”;         }

        $time = $dateTime->format('H:i:s');
    
        return $time;
    }
    
    /**
     * Transforms a string (number) to an object (issue).
     *
     * @param  string $duration
     * @return mixed|object
     */
    public function reverseTransform($duration)
    {
        if (!$duration) {
            return null;
        }
    
        $dateTime = new \DateTime($duration);
    
        return $dateTime;
    }
    

    }

  3. 创建要添加到表单的自定义TimePicker类型

    命名空间AppBundle \ Form \ Type;

    使用Symfony \ Component \ Form \ AbstractType; 使用Symfony \ Component \ Form \ FormBuilderInterface; 使用AppBundle \ Form \ DataTransformer \ DateTimeToDurationTransformer; 使用Symfony \ Component \ OptionsResolver \ OptionsResolverInterface;

    类TimePickerType扩展AbstractType {

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $transformer = new DateTimeToDurationTransformer();
        $builder->addModelTransformer($transformer);
    }
    
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
                'invalid_message' => "La durée indiquée n'est pas au bon format",
                'attr' => array(
                    'class'=>'timepicker',
                )));
    }
    
    public function getParent()
    {
        return 'text';
    }
    
    public function getName()
    {
        return 'timepicker';
    }
    

    }

  4. 在服务中注册TimePicker类型

    服务:     timepicker.type:         class:%timepicker.type.class%         标签:              - {name:form.type,alias:timepicker}

  5. 在表单中使用新创建的类型:

    $builder
                ->add('workingDuration', 'timepicker', array(
                            'label'=>'Temps total de travail',
                            'required' => false,
                            'attr'=>array
                            (
                                'class' => 'timepicker',
                                'data-toggle'=>"tooltip",
                                'data-placement'=>"top",
                                'title'=>"Indiquez le temps total de travail consacré à la recette si il diffère du temps de travail cumulé des étapes de production.",
                            )))
    
  6. 这就是它需要但现在正在工作!!

    另外请不要忘记将timepicker与timeFormat HH:mm:ss

    一起使用