我最近建立一个DataTransformer
将在年底接受各种不同的日期格式(如2012年12月12日或2012年12月12日或二○一二年十二月一十二日)。
我的问题是 :之前,我有日期和时间分成两个不同的领域:
$builder->add('date_end', 'datetime', array(
'label' => 'Date/Time',
'date_widget' => 'single_text',
'time_widget' => 'single_text',
'date_format' => 'dd.MM.yyyy',
'with_seconds' => false,
'required' => false,
) )
这工作得很好。 我如何与新的做到这一点DataTransformer
?
在我的实体类型:
public function buildForm(FormBuilder $builder, array $options) {
builder->add('date_end', 'dateTime', array(
'label' => 'Date/Time',
'required' => false,
) )
}
相应DateTimeType我创建:
class DateTimeType extends AbstractType {
private $om;
public function __construct(ObjectManager $om) {
$this->om = $om;
}
public function buildForm(FormBuilder $builder, array $options) {
$transformer = new DateTimeTransformer($this->om);
$builder->appendClientTransformer($transformer);
}
public function getDefaultOptions(array $options) {
return array(
'invalid_message' => 'TODO INVALID',
);
}
public function getParent(array $options) {
return 'text';
}
public function getName(){
return 'dateTime';
}
}
到目前为止,我的变压器:
/**
* @param \DateTime|null $dateTime
* @return string|null
*/
public function transform($dateTime) {
if (null === $dateTime) {
return null;
}
return $dateTime->format('Y-m-d H:i');
}
/**
* @param string $value
* @return string|null
*/
public function reverseTransform($value)
{
if ( (null === $value) || empty($value) ) {
return null;
}
return new \DateTime( $value );
}