2013-09-08 4 views
2

Я хотел бы создать поле выбора html с записями даты и времени последних сделанных изменений. При использовании любых других полей в базе данных это работает, а в datetime это не так.Symfony entity с Datetime

В formtype У меня есть

class MemberlistType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('CreatedAt', 'entity', array(
       'mapped' => false, 
       'class' => 'TestProject\TestBundle\Entity\Memberlist', 
       'property' => 'created_at' 
       )) 

`

В представлении меня

{{form_label(form.children.memberlists[0].children.CreatedAt}} 
{{form_widget(form.children.memberlists[0].children.CreatedAt}} 
{{form_errors(form.children.memberlists[0].children.CreatedAt)}} 

И я получаю:

An exception has been thrown during the rendering of a template ("Catchable Fatal Error: Object 
of class DateTime could not be converted to string in /var/www/symfony/vendor/symfony/symfony 
/src/Symfony/Component/Translation/Translator.php line 188") in 
TestprojectTestBundle:Default:updateData.html.twig at line 77 

Как я могу преобразовать этот DateTime вставить в легкую w ау?

ответ

1

У вас есть эта ошибка, потому что сущность пытается просмотреть имя как строку, но объект \ DateTime не имеет метода __toString.

Лучшее решение - создание настраиваемого трансформатора зрения.

1

Вы могли бы назвать веточка фильтр "дата":

{{form_label(form.children.memberlists[0].children.CreatedAt|date("m/d/Y")}} 
{{form_widget(form.children.memberlists[0].children.CreatedAt|date("m/d/Y")}} 
{{form_errors(form.children.memberlists[0].children.CreatedAt|date("m/d/Y"))}} 

Edit, я неправильно вопрос ... Как ZhukV сказал, вам нужно ViewTransformer:

namespace My\Bundle\Form\Transformers; 

class DateToStringTransformer 
{ 
    public function transform($dateObj) 
    { 
     if (null === $dateObj) { 
      return ""; 
     } 

     return $dateObj->format('m/d/Y'); 
    } 

    public function reverseTransform($date) 
    { 
     if ($date === "") { 
      return null; 
     } 
     $dateObj = new \DateTime($issue); 

     return $dateObj; 
    } 
} 

затем вызвать его в вашей форме:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $transformer = new new DateToStringTransformer(); 
    $builder 
     ->add(
      $builder->create('CreatedAt', 'entity', array(
       'mapped' => false, 
       'class' => 'TestProject\TestBundle\Entity\Memberlist', 
       'property' => 'created_at' 
      ))->addViewTransformer($transformer) 
     ) 

Больше информации здесь: http://symfony.com/fr/doc/current/cookbook/form/data_transformers.html

+0

Нет, тогда я получаю «Объект класса Symfony \ Component \ Form \ FormView не может быть преобразован в строку» – Dweezahr

+0

Я отредактировал свой ответ, я неправильно понял ваш вопрос –

+0

Не работал. Я получил FatalErrorException: Ошибка: вызов неопределенного метода TestProject \ TestBundle \ Entity \ Listlist :: format(), но я нашел другой метод – Dweezahr

Смежные вопросы