如何从树枝发送和接收请求参数到控制器
How to send and receive request params from twig to controller
我有一个 Booking 表单,我想预订汽车,我想在发送表单值时创建一个新的 Booking 对象并将其保存在数据库中,汽车和 Booking 与 OneToMany 关系相关。
预订控制器
/**
* @param Request $request
* @return Response
* @Route ("/booking/car/{id}", name="car.book")
*/
public function book(Request $request)
{
$booked_car = $request->query->get('id');
$booking = new Booking();
$booking->setCar($booked_car);
$form = $this->createForm(BookingType::class, $booking);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()){
$booking = $form->getData();
$this->em->persist($booking);
$this->em->flush();
$this->addFlash('success', 'Démande envoyée avec success');
return $this->redirectToRoute('car.index');
}
return $this->render('booking/book.html.twig',[
'booking' => $booking,
'form' => $form->createView()
]);
}
我列出汽车的索引/只有按钮
<div class="col-2">
<a class="btn btn-dark mt-2 mb-2" style="border-radius: 0 !important;" href="{{ path('car.book', {id: car.id, car: car}) }}"> Réserver </a>
</div>
form.html.twig
<h3 class="mt-5 mb-5">Vos informations</h3>
<div class="row d-flex" >
<div class="col-6">
<div class="row d-flex">
<div class="col-4">
{{ form_row(form.driving_license_number) }}
</div>
<div class="col-4">
{{ form_row(form.national_id_card) }}
</div>
<div class="col-4">
{{ form_row(form.passeport_number) }}
</div>
</div>
</div>
</div>
{{ form_widget(form) }}
{{ form_end(form) }}
id参数一直为null,如何从request中获取并搜索id对应的object car设置到Booking对象中?
您需要从注释而不是请求中获取 ID。
类似这样的事情:
public function book(Request $request,CarEntityName $carEntityName)
{
$booked_car = $carEntityName;
//....
}
希望对您有所帮助。
您正在使用$booked_car = $request->query->get('id');
检索url中的参数,但query
指的是查询字符串参数,其中有none。在那种情况下你想使用路线 attributes
: $request->attributes->get('id');
更好的是,如果你的控制器动作有一个以参数命名的变量,symfony 会自动绑定它。
public function book(Request $request, $id)
当您调用 setCar
时,您可能需要实体本身而不仅仅是 ID,因此您必须从数据库中加载它。 Symfony 也可以为你加载它,如果你像前面的答案中指出的那样用正确的实体提示变量(因为参数被称为 id
,它会尝试通过主键加载它)。
我有一个 Booking 表单,我想预订汽车,我想在发送表单值时创建一个新的 Booking 对象并将其保存在数据库中,汽车和 Booking 与 OneToMany 关系相关。
预订控制器
/**
* @param Request $request
* @return Response
* @Route ("/booking/car/{id}", name="car.book")
*/
public function book(Request $request)
{
$booked_car = $request->query->get('id');
$booking = new Booking();
$booking->setCar($booked_car);
$form = $this->createForm(BookingType::class, $booking);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()){
$booking = $form->getData();
$this->em->persist($booking);
$this->em->flush();
$this->addFlash('success', 'Démande envoyée avec success');
return $this->redirectToRoute('car.index');
}
return $this->render('booking/book.html.twig',[
'booking' => $booking,
'form' => $form->createView()
]);
}
我列出汽车的索引/只有按钮
<div class="col-2">
<a class="btn btn-dark mt-2 mb-2" style="border-radius: 0 !important;" href="{{ path('car.book', {id: car.id, car: car}) }}"> Réserver </a>
</div>
form.html.twig
<h3 class="mt-5 mb-5">Vos informations</h3>
<div class="row d-flex" >
<div class="col-6">
<div class="row d-flex">
<div class="col-4">
{{ form_row(form.driving_license_number) }}
</div>
<div class="col-4">
{{ form_row(form.national_id_card) }}
</div>
<div class="col-4">
{{ form_row(form.passeport_number) }}
</div>
</div>
</div>
</div>
{{ form_widget(form) }}
{{ form_end(form) }}
id参数一直为null,如何从request中获取并搜索id对应的object car设置到Booking对象中?
您需要从注释而不是请求中获取 ID。
类似这样的事情:
public function book(Request $request,CarEntityName $carEntityName)
{
$booked_car = $carEntityName;
//....
}
希望对您有所帮助。
您正在使用$booked_car = $request->query->get('id');
检索url中的参数,但query
指的是查询字符串参数,其中有none。在那种情况下你想使用路线 attributes
: $request->attributes->get('id');
更好的是,如果你的控制器动作有一个以参数命名的变量,symfony 会自动绑定它。
public function book(Request $request, $id)
当您调用 setCar
时,您可能需要实体本身而不仅仅是 ID,因此您必须从数据库中加载它。 Symfony 也可以为你加载它,如果你像前面的答案中指出的那样用正确的实体提示变量(因为参数被称为 id
,它会尝试通过主键加载它)。