Отправка формы: значение установлено на ноль

Я создаю рекламную платформу, я только что создал объект бронирования и его форму, но после того, как форма была отправлена, значение «сумма» установлено равным нулю, хотя оно не должно быть нулевым.

Я создал функцию prePersist для установки свойства суммы перед очисткой.

Вот функция prePersist в моей сущности Booking

     * @ORM\PrePersist
     * 
     * @return void
     */
    public function prePersist()
     {
         if (empty($this->createdAt))
         {
             $this->createdAt = new \DateTime();

         }

         if (empty($this->amount))
         {
            $this->amount = $this->ad->getPrice() * $this->getDuration();
         }
     }

public function getDuration()
     {
        $diff = $this->endDate->diff($this->startDate);
        return $this->days;
     }

Мой BookingController

    /**
     * @Route("/annonces/{id}/booking", name = "ad_booking")
     * @IsGranted("ROLE_USER")
     */
    public function booking(Ad $ad, Request $request, ObjectManager $manager)
    {
        $booking = new Booking;        

        $form = $this->createForm(BookingType::class, $booking);

        $user = $this->getUser();

        $booking->setBooker($user) 
                        ->setAd($ad);

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid())
        {

            $manager->persist($booking);

            $manager->flush();

            return $this->redirectToRoute('booking_success', [
                'id' => $booking->getId() 
            ]);
        }

        return $this->render('booking/booking.html.twig', [
            'ad' => $ad,
            'bookingForm' => $form->createView()
        ]);
    }
}

Это не работает, когда пользователь определен с помощью $this->getUser(); при подаче и проверке действительности. Это происходит впервые с тех пор, как я начал изучать Symfony. Я уверен, что, должно быть, что-то забыл, но я потратил столько времени на размышления о чем, что не вижу ответа.

и моя форма BookingType

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('startDate', DateType::class, [
                'label' => 'Date de début de prestatation',
                'widget' => 'single_text'
            ])
            ->add('endDate', DateType::class, [
                'label' => 'Date de fin de prestatation',
                'widget' => 'single_text'

            ])
        ;
    }

Пока форма отправляется, она должна вызвать функцию prePersist, а затем установить свойство суммы, но она возвращает значение null. Я действительно не понимаю, что я пропустил.

JS - События опций формы
JS - События опций формы
В продолжение предыдущей статьи CSS - стили, связанные с вводом формы , в этой статье мы будем использовать JS для взаимодействия с формами, на этот...
CSS - Стили, связанные с вводом формы
CSS - Стили, связанные с вводом формы
Общими стилями ввода для форм являются Input (включая Text, Radio, checkbox), Select и Textarea, из которых Input относительно прост, поэтому в этой...
Создание многостраничной формы заявления о приеме на работу с помощью Angular
Создание многостраничной формы заявления о приеме на работу с помощью Angular
Наличие на корпоративном сайте форм заявлений о приеме на работу, или "трудовых анкет", экономит время и деньги как для соискателей, так и для...
0
0
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Поскольку кажется, что ваш PrePersist не уволен, я предполагаю, что вы, возможно, забыли аннотацию @ORM\HasLifecycleCallbacks() на своей сущности.

/**
 * @ORM\Entity(repositoryClass = "App\Repository\BookingRepository")
 * @ORM\HasLifecycleCallbacks()
 */
class Booking
{
    ...
}

Спасибо за ответ ! Я использовал аннотацию @ORM\HasLifecycleCallbacks(), я должен был уточнить ее. Вот почему я потерялся и не понимаю, что не так!

neptj 23.06.2019 12:30

В вашем методе getDuration() вы возвращаете $this->days;, но мы не видим, как это установлено, вы, похоже, не используете результат $diff из $this->endDate->diff($this->startDate);?

Rmy5 23.06.2019 13:46

Я ошибся, это хорошо public function getDuration() { $diff = $this->endDate->diff($this->startDate); return $diff->days; } а не return $this->days; Соответствует формату, я пытался изменить с помощью $diff->format('%R%a days'); но все равно не работает, это не устанавливает сумму.

neptj 24.06.2019 10:21
Ответ принят как подходящий

Я только что узнал, что это было неправильно. Это было связано с автоматической проверкой: в validator.yaml я прокомментировал auto_mapping с

            App\Entity\Booking: true
            App\Entity\User: true

Теперь все работает нормально!

Другие вопросы по теме