Symfony 5 — Доступ к вложенному объекту в

Я снова :( Мне очень жаль... Наверное, я долго работаю, и я не вижу решения.

У меня есть контактная форма. Данные формы обрабатываются в ContactController

/**
     * @Route("/contact", name="contact")
     * @param Request $request
     * @param EntityManagerInterface $em
     * @param MailerInterface $mailer
     * @return Response
     * @throws TransportExceptionInterface
     */
    public function index(Request $request, EntityManagerInterface $em, MailerInterface $mailer): Response
    {
        $contact = new Contact();
        $contactForm = $this->createForm(ContactType::class, $contact);
        $contactForm->handleRequest($request);
        if($contactForm->isSubmitted() && $contactForm->isValid()){
            //setting current date and time
            $date= new DateTime('now');
            $date->setTimezone(new \DateTimeZone(('Europe/Berlin')));
            $contact->setTimeAdded($date);
            
            //preparing E-Mail and sending it
            $email = (new TemplatedEmail())
                ->from('[email protected]')
                ->to('[email protected]')
                ->subject('Nachricht über das Kontaktformular')
                ->htmlTemplate('contact/mail.html.twig')
                ->context(['contact' => $contact]);
            $mailer->send($email);
            
            //saving contact data to database
            $em->persist($contact);
            $em->flush();
            
            //adding flash message
            $this->addFlash('success', 'Ihre Nachricht wurde versandt');
            
            //redirect to confirmation page
            return $this->render('contact/sentconf.html.twig',[
            'contact' => $contact
            ]);
        }

        return $this->render('contact/index.html.twig', [
            'ContactForm' => $contactForm->createView(),
        ]);
    }

Просто я подумал, что могу просто использовать contact.time_added в шаблоне ветки, но это приводит к следующему: введите здесь описание изображения

Я сбросил contact в twig и получил следующее:

/var/www/html/vendor/twig/twig/src/Extension/DebugExtension.php:59:
object(App\Entity\Contact)[437]
  private 'id' => null
  private 'name' => string 'Markus' (length=6)
  private 'email' => string '[email protected]' (length=12)
  private 'subject' => string 'Testanfrage' (length=11)
  private 'text' => string 'SVasdfasdfasdfas dfqwertcqet vsdv awadf a' (length=41)
  private 'time_added' => 
    object(DateTime)[762]
      public 'date' => string '2020-12-23 19:08:26.047662' (length=26)
      public 'timezone_type' => int 3
      public 'timezone' => string 'Europe/Berlin' (length=13)
  private 'update_time' => null

Итак, я увидел, что time_added — это еще один объект. Моя идея заключалась в том, чтобы попробовать это так:

{{ contact.time_added.date }}

Но я получаю тот же результат.

Может кто-нибудь указать мне в правильном направлении, как получить доступ к дате?


person Mark    schedule 23.12.2020    source источник
comment
Прочтите ошибку, общедоступного геттера getTimeAdded нет, а свойство приватное   -  person DarkBee    schedule 23.12.2020
comment
+ вам нужно будет установить формат для объекта DateTime, чтобы он правильно анализировался в Twig.   -  person LBA    schedule 23.12.2020
comment
Нет, поэтому у вас есть фильтр date   -  person DarkBee    schedule 23.12.2020


Ответы (2)


Страхование у вас есть метод getter следующим образом:

public function getTimeAdded() {
    return $this->time_added;
}

Правильный синтаксис для отображения DateTime в Twig будет следующим:

{{ contact.timeAdded|date }}

{# optionally pass a DateTime format string #}
{{ contact.timeAdded|date('m/d/Y') }}

Вывод должен быть:

December 23, 2020 19:08

12/23/2020

https://twig.symfony.com/doc/3.x/filters/date.html

person Arleigh Hix    schedule 23.12.2020
comment
У меня есть геттер в объекте public function getTimeAdded(): ?\DateTimeInterface { return $this->time_added; } Я действительно понятия не имею, почему он не работает. Может из-за интерфейса в функции? - person Mark; 24.12.2020

Я понял это и чувствую себя таким глупым, что не видел этого.
Это {{ contact.timeadded|date }} и нет {{ contact.time_added|date }}

Извините за беспокойство :(

person Mark    schedule 23.12.2020
comment
Хм, это было в моем ответе. Правильный синтаксис для отображения DateTime в Twig будет следующим: - person Arleigh Hix; 25.12.2020
comment
Почему вместо этого вы не приняли этот ответ? - person Stephan Vierkant; 02.08.2021