Symfony - 将记录添加到数据库
Symfony - adding record to db
我用一个表单编写了代码,该表单具有向数据库添加新数据的操作。似乎一切都以正确的方式连接,但 'Add' 按钮没有响应,到目前为止我没有收到任何错误。
My Controller
/**
* @Route("/theater-add", name="theater_add")
* @param Request $request
* @return \Symfony\Component\HttpFoundation\Response
* @throws \Exception
*/
public function theaterAddAction(Request $request)
{
$form = $this->createFormBuilder()
->add('name', TextType::class, array('label' => 'Theater Name', 'attr' => ['class'=>'form-control']))
->add('town', TextType::class, array('label' => 'Town', 'attr' => ['class'=>'form-control']))
->add('address', TextType::class, array('label' => 'Address', 'attr' => ['class'=>'form-control']))
->add('phone', TextType::class, array('label' => 'Phone', 'attr' => ['class'=>'form-control']))
->add('capacity', TextType::class, array('label' => 'Capacity', 'attr' => ['class'=>'form-control']))
->add('seats', TextType::class, array('label' => 'Seats', 'attr' => ['class'=>'form-control']))
->add('save', SubmitType::class, array('label' => 'Add', 'attr' => ['class' => 'btn btn-primary pull-right action-save']))
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$name = $data['name'];
$town = $data['town'];
$address = $data['address'];
$phone = $data['phone'];
$capacity = $data['capacity'];
$seats = $data['seats'];
$this->container->get('theater')->addNewTheater($name, $town, $address, $phone, $capacity, $seats);
}
$build['form'] = $form->createView();
return $this->render('@AdminTemplates/pages/theater-add.html.twig', $build);
}
Service
public function addNewTheater($name, $town, $address, $phone, $capacity, $seats)
{
$newTheater = new Theater();
$newTheater -> setName($name);
$newTheater -> setTown($town);
$newTheater -> setAddress($address);
$newTheater -> setPhone($phone);
$newTheater -> setCapacity($capacity);
$newTheater -> setSeats($seats);
$this->em->persist($newTheater);
$this->em->flush();
return $newTheater;
}
my twig view
{{ form_start(form, {'action': path('theater_add'), 'method': 'GET'}) }}
<form>
<div class="row">
<div class="col-md-12">
<div class="form-group">
{{ form_row(form.name) }}
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
{{ form_row(form.town) }}
</div>
</div>
<div class="col-md-6">
<div class="form-group">
{{ form_row(form.address) }}
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
{{ form_row(form.phone) }}
</div>
<div class="col-md-4">
{{ form_row(form.capacity) }}
</div>
<div class="col-md-4">
<div class="form-group">
{{ form_row(form.seats) }}
</div>
</div>
</div>
</form>
{{ form_end(form) }}
我需要一些指导,因为我在网上找不到任何解决方案。
您的 Twig 模板有误:
{{ form_start(form, {'action': path('theater_add'), 'method': 'GET'}) }}
<form>
...
</form>
{{ form_end(form) }}
{{ form_start(form) }}
呈现一个表单元素(在 HTML 模板中)并且 {{ form_end(form) }}
呈现一个 </form>
结束标记,所以基本上你创建以下 HTML:
当您单击提交按钮时,将提交内部表单,该表单不会处理控制器中的 $request
对象,因此 ($form->isSubmitted() && $form->isValid())
永远不会解析为 true 并且以下 if
(真正发生加法的地方)永远不会执行。
总结一下:
只需删除模板中的 form_start 之后和 form_end 之前。
这是一个简单的错误..
我关闭了两次表单标签,所以添加按钮不在表单中..
</form>
{{ form_end(form) }}
我用一个表单编写了代码,该表单具有向数据库添加新数据的操作。似乎一切都以正确的方式连接,但 'Add' 按钮没有响应,到目前为止我没有收到任何错误。
My Controller
/**
* @Route("/theater-add", name="theater_add")
* @param Request $request
* @return \Symfony\Component\HttpFoundation\Response
* @throws \Exception
*/
public function theaterAddAction(Request $request)
{
$form = $this->createFormBuilder()
->add('name', TextType::class, array('label' => 'Theater Name', 'attr' => ['class'=>'form-control']))
->add('town', TextType::class, array('label' => 'Town', 'attr' => ['class'=>'form-control']))
->add('address', TextType::class, array('label' => 'Address', 'attr' => ['class'=>'form-control']))
->add('phone', TextType::class, array('label' => 'Phone', 'attr' => ['class'=>'form-control']))
->add('capacity', TextType::class, array('label' => 'Capacity', 'attr' => ['class'=>'form-control']))
->add('seats', TextType::class, array('label' => 'Seats', 'attr' => ['class'=>'form-control']))
->add('save', SubmitType::class, array('label' => 'Add', 'attr' => ['class' => 'btn btn-primary pull-right action-save']))
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$name = $data['name'];
$town = $data['town'];
$address = $data['address'];
$phone = $data['phone'];
$capacity = $data['capacity'];
$seats = $data['seats'];
$this->container->get('theater')->addNewTheater($name, $town, $address, $phone, $capacity, $seats);
}
$build['form'] = $form->createView();
return $this->render('@AdminTemplates/pages/theater-add.html.twig', $build);
}
Service
public function addNewTheater($name, $town, $address, $phone, $capacity, $seats)
{
$newTheater = new Theater();
$newTheater -> setName($name);
$newTheater -> setTown($town);
$newTheater -> setAddress($address);
$newTheater -> setPhone($phone);
$newTheater -> setCapacity($capacity);
$newTheater -> setSeats($seats);
$this->em->persist($newTheater);
$this->em->flush();
return $newTheater;
}
my twig view
{{ form_start(form, {'action': path('theater_add'), 'method': 'GET'}) }}
<form>
<div class="row">
<div class="col-md-12">
<div class="form-group">
{{ form_row(form.name) }}
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
{{ form_row(form.town) }}
</div>
</div>
<div class="col-md-6">
<div class="form-group">
{{ form_row(form.address) }}
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
{{ form_row(form.phone) }}
</div>
<div class="col-md-4">
{{ form_row(form.capacity) }}
</div>
<div class="col-md-4">
<div class="form-group">
{{ form_row(form.seats) }}
</div>
</div>
</div>
</form>
{{ form_end(form) }}
我需要一些指导,因为我在网上找不到任何解决方案。
您的 Twig 模板有误:
{{ form_start(form, {'action': path('theater_add'), 'method': 'GET'}) }}
<form>
...
</form>
{{ form_end(form) }}
{{ form_start(form) }}
呈现一个表单元素(在 HTML 模板中)并且 {{ form_end(form) }}
呈现一个 </form>
结束标记,所以基本上你创建以下 HTML:
当您单击提交按钮时,将提交内部表单,该表单不会处理控制器中的 $request
对象,因此 ($form->isSubmitted() && $form->isValid())
永远不会解析为 true 并且以下 if
(真正发生加法的地方)永远不会执行。
总结一下: 只需删除模板中的 form_start 之后和 form_end 之前。
这是一个简单的错误..
我关闭了两次表单标签,所以添加按钮不在表单中..
</form>
{{ form_end(form) }}