表单提交:值设置为null

时间:2019-06-22 14:24:44

标签: forms entity symfony4 sql-null

我正在制作一个广告平台,我刚刚创建了一个Booking实体及其表单,但是在提交表单之后,值'amount'设置为null,但不应为null。

我创建了一个prePersist函数,用于在刷新之前设置amount属性。

这是我的实体预订中的prePersist功能

     * @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函数,然后设置amount属性,但是它返回为null。我真的不明白我错过了什么。

2 个答案:

答案 0 :(得分:0)

由于您的PrePersist似乎没有被解雇,我想您可能已经忘记了实体上的@ORM\HasLifecycleCallbacks()注释。

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

答案 1 :(得分:0)

我刚刚发现那是错误的。它被链接到自动验证: 在validator.yaml中,我用

注释了auto_mapping
            App\Entity\Booking: true
            App\Entity\User: true

现在一切正常!