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) }}