我正在努力让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;
}
我该怎么做才能让它发挥作用。实际上我期待只存储一段短暂的时间,因此需要时间戳。
答案 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插件时间选择器能够存储持续时间。
答案是:
创建一个数据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;
}
}
创建要添加到表单的自定义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';
}
}
在服务中注册TimePicker类型
服务: timepicker.type: class:%timepicker.type.class% 标签: - {name:form.type,alias:timepicker}
在表单中使用新创建的类型:
$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.",
)))
这就是它需要但现在正在工作!!
另外请不要忘记将timepicker与timeFormat HH:mm:ss
一起使用