맞춤 datetime 양식 필드를 만들려고합니다. 이 answer처럼 DataTransformer를 사용하여 날짜 양식 필드와 시간 양식 필드가있는 날짜/시간 필드를 분할했습니다.symfony2 맞춤 시간 선택 필드
나는 날짜 선택을위한 JQuery와 날짜 선택기를 사용하지만, 나는 아 파크 시간 선택을위한 ONE 사용자 선택 양식 필드를 갖고 싶어 시간 반 intervalls : 여기
00:00
00:30
...
23:30
내 코드입니다하지만 난 방법을 잘 모르겠어요 내 엔티티
/**
* Time
*
* @ORM\Table(name="time")
* @ORM\Entity
*/
class Time
{
...
/**
* @var \DateTime
*
* @ORM\Column(name="begin_date", type="datetime", nullable=false)
*/
private $beginDate;
/**
* @var \DateTime
*
* @ORM\Column(name="end_date", type="datetime", nullable=false)
*/
private $endDate;
...
/**
* Set beginDate
*
* @param \DateTime $beginDate
* @return Time
*/
public function setBeginDate($beginDate)
{
$this->beginDate = $beginDate;
return $this;
}
/**
* Get beginDate
*
* @return \DateTime
*/
public function getBeginDate()
{
$this->beginDate;
}
/**
* Set endDate
*
* @param \DateTime $endDate
* @return Time
*/
public function setEndDate($endDate)
{
$this->endDate = $endDate;
return $this;
}
/**
* Get endDate
*
* @return \DateTime
*/
public function getEndDate()
{
return $this->endDate;
}
...
}
양식 유형에서이
접근
그래서 여기 373,내 사용자 지정 양식 유형 :
class MyDateTimeType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('date', 'genemu_jquerydate', array('input' => 'datetime','widget' => 'single_text','format' => 'dd/MM/yyyy','error_bubbling' => true))
->add('time', 'choice', array(
'choices' => array(
'00:00' => '00:00',
'00:30' => '00:30',
'01:00' => '01:00',
...
'22:30' => '22:30',
'23:00' => '23:00',
'23:30' => '23:30',
),'error_bubbling' => true
));
$builder->appendClientTransformer(new DateTimeToDateTimeArrayTransformer());
}
public function getDefaultOptions(array $options)
{
return array(
'label' => 'label.form.date',
'error_bubbling' => false
);
}
public function getName()
{
return 'my_datetime';
}
}
그리고 이것은 DataTransformer입니다 :
class DateTimeToDateTimeArrayTransformer implements DataTransformerInterface
{
public function transform($datetime)
{
if(null !== $datetime)
{
$date = clone $datetime;
$date->setTime(12, 0, 0);
$time = clone $datetime;
$time->setDate(1970, 1, 1);
}
else
{
$date = null;
$time = null;
}
$result = array(
'date' => $date,
'time' => $time
);
return $result;
}
public function reverseTransform($array)
{
$date = $array['date'];
// $time = $array['time']; // Fatal error: Call to a member function format() on a non-object
$time = new \DateTime($array['time']);
if(null == $date || null == $time)
return null;
$date->setTime($time->format('G'), $time->format('i'));
return $date;
}
}
양식 표시가 정확한지,하지만 난 양식을 제출하면이 오류를 얻을 :
Notice: Object of class DateTime could not be converted to int in /var/www/ttime/vendor/symfony/symfony/src/Symfony/Component/Form/Extension/Core/ChoiceList/ChoiceList.php line 457 500 Internal Server Error - ErrorException
반면에 datetime + custom choice가 DB에 제대로 저장되어 있습니다.
array('00:00' => '00:00',...)
당신이 말해 줄 수 방법이 오류를 제거 할 수 있습니다
은 내가 reverseTransform 기능 반환 날짜 형식, 그리고 그것은 선택 형식으로 변환 할 수 없습니다 양식 빌더라고 생각?
더 좋은 방법이 있나요?
아마 당신의 법인 또는 날짜를 저장하는 데이터베이스는 INT로 정의됩니다. 왜 당신의 질문에 그것들을 복사하지 않습니까? – Xocoatzin
질문을 업데이트했습니다. 엔티티의 객체는 datetime 객체입니다 – Alex