У меня есть форма, которая содержит 3 поля текста типа и с валидатором даты.Как добавить пользовательскую стратегию гидратора для доктрины Дата гидратор
Этот код находится в Fieldset с помощью доктрины гидратор (связанной с доктриной сущности)
$this->add(
array(
'name' => 'endDate',
'type' => 'Zend\Form\Element\Text',
'options' => array(
'label' => 'end_date_label',
'label_attributes' => array(
'class' => 'control-label col-xs-3'
),
),
'attributes' => array(
'class' => 'form-control col-xs-3 datepicker-end-date',
)
)
);
'endDate' => array(
'required' => true,
'allow_empty' => false,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'Date',
'options' => array(
'format' => 'd/m/Y',
),
),
),
),
Я работает с французским форматом даты. Когда я верю форму, если я меняю формат на m/d/Y, он работает, но когда моя форма недействительна, мой выбор даты получает неправильную дату (месяц и дни обращаются).
Что я хочу - это действительный формат дат и сохранение в базе данных даты в формате m/d/Y.
В этом формате я получаю ошибку:
DateTime::__construct(): Failed to parse time string (29/04/2015) at position 0 (2): Unexpected character
Я видел много поста на Stack говорить о пользовательской стратегии доктрины гидратации, но я их не понимаю. Что я должен делать шаг за шагом?
Я пытался добавить стратегию моего поля ENDDATE, но он никогда не называл ... Этот код находится в классе Fieldset незадолго до моего поля декларации:
$this->setHydrator(new DoctrineHydrator($this->getObjectManager(), 'TodoList\Entity\TodoQuestion'))
->setObject(new TodoQuestion());
$this->getHydrator()->addStrategy('endDate', new \Application\Strategy\DateTimeStrategy());
И моя стратегия Datetime реализует интерфейс стратегии.
<?php
namespace Application\Strategy;
use Zend\Stdlib\Hydrator\Strategy\StrategyInterface;
class DateTimeStrategy implements StrategyInterface
{
public function hydrate($value)
{
if (is_string($value)) {
$value = new DateTime($value);
}
return $value->format('d/m/Y');
}
public function extract($value)
{
return;
}
}
Если кто-то может объяснить с подробностями, что я делаю неправильно, и помочь мне понять все это дело ..
Как вы хранить значение даты в базе данных? Как варчар? Если это так, сохранение в качестве даты и времени сделает вещи намного проще. – netiul
Я храню время, конечно, –