У меня есть поле даты
/** * @var \DateTime * * @ORM\Column(name="date", type="datetime", nullable=true) */ private $datetime; /** * Set date * * @param \DateTime $datetime * */ public function setDate($datetime) { $this->datetime = $datetime; return $this->datetime ?? new \DateTime(); } /** * Get date * * @return \DateTime */ public function getDate(): \DateTime { return $this->datetime ?? new \DateTime(); }
Я эту ошибку ниже:
Вызов в формате функции участника () в массиве
Кто-нибудь знает, почему я это понял?
Редактировать:
Ниже приведен код, который я использую для создания формы для чтения в значении DateTime, а затем собираю данные из формы и создаю новую сущность в таблице:
$trainingform = new Training(); $form = $this->createFormBuilder($trainingform) ->add('Leader', TextType::class) ->add('Date', DateTimeType::class, ['label' => 'Date and Time']) ->add('topics', TextType::class, ['label' => 'Topics Being Covered']) ->getForm(); if ($form->handleRequest($request)->isValid()) { $trainingform->setLeader($request->request->get('form')['Leader']); $trainingform->setDate($request->request->get('form')['Date']); $trainingform->setTopics($request->request->get('form')['topics']); $em->persist($trainingform); $em->flush(); }
Чтобы правильно обрабатывать ваши данные, вы должны использовать getData
метод формы symfony, который раньше будет преобразовывать ваш запрос в состояние, указанное вами в вашей форме. В вашем случае это должно выглядеть так:
$trainingForm = new Training(); $form = $this->createFormBuilder($trainingForm) ->add('Leader', TextType::class) // 'Leader' should be named as your property ->add('datetime', DateTimeType::class, ['label' => 'Date and Time']) //changed your Date to datetime as your property is ->add('topics', TextType::class, ['label' => 'Topics Being Covered']) //should be named as your property as well ->add('submit', SubmitType::class, ['label' => 'Submit form']) //should be there ->getForm(); $form->handleRequest($request) if (form->isSubmitted() && form->isValid()) { $trainingForm= $form->getData(); $em->persist($trainingForm); $em->flush(); }
Чтобы избежать такой несогласованности, вы можете указать требуемый тип в методе setter:
/** * Set date * * @param \DateTime $datetime */ public function setDate(\DateTime $datetime) //typhint added { $this->datetime = $datetime; }
`
Сеттер не должен ничего возвращать. Затем вы получите свою ошибку на шаге, который вы можете контролировать, и вы узнаете, где вы должны копать.