无法使用Symfony2中的表单将数据插入数据库

时间:2011-09-21 09:41:11

标签: doctrine-orm symfony

我有一个用户输入数据的表单。然后,当他们点击提交时,这些数据将被保存到数据库中。

唯一的问题是,它没有这样做。发生了什么,是当单击提交时,页面将重新加载,并且仍将显示在表单中输入的所有数据。我去检查数据库,记录还没有更新。

没有错误,但根据分析器,加载页面时会运行三个SQL语句。所有这三个都是SELECT语句,而不是那里的一个INSERT语句。

以下是控制器中页面的代码(包括“INSERT”语句):

    public function addAction(Request $request)
{   

    $pageadd = new Content();
    $form = $this->createForm(new PageAdd(), $pageadd);

    $request = $this->getRequest();
    if ($request->getMethod() == 'POST') {
        $form->bindRequest($request);

        if ($form->isValid()) {
            $em = $this->getDoctrine()->getEntityManager();

            $em->persist($pageadd);
            $em->flush();

            return new Response('Created page id '.$pageadd->getId());

        }
    }

    return $this->render('ShoutAdminBundle:Default:pageadd.html.twig', array(
        'form' => $form->createView()
    ));

}

以下是表单的代码(由于空间原因,我省略了一些字段。但它们都完全相同):

<form action="{{ path('ShoutAdminBundle_adminpageaddpost') }}" method="post" {{ form_enctype(form) }} class="blogger">

    <p class="row">
        {{ form_label(form.id, 'ID*', { 'attr': {'class': 'title'} }) }}
        {{ form_errors(form.id) }}
        {{ form_widget(form.id, { 'attr': {'class': 'textfield'}}) }}
    </p>
    <p class="row">
        {{ form_label(form.title, 'Title*', { 'attr': {'class': 'title'} }) }}
        {{ form_errors(form.title) }}
        {{ form_widget(form.title, { 'attr': {'class': 'textfield'}}) }}
    </p>

    <p class="row">
        <input type="submit" value="Save This Page" class="savebutton" />
    </p>
</form>

如果您需要更多代码,我会提供。我认为这两段代码就是问题所在。

干杯!

1 个答案:

答案 0 :(得分:2)

你必须在持久化之前填充实体,我举个例子:

public function saveAction(Request $request)
{
    if ($request->getMethod() == 'POST') {
        // EntityManager
        $em = $this->getDoctrine()->getEntityManager();

        // New entity
        $registration = new Customer();

        // Build the form
        $form = $this->createFormBuilder()
        ->add('name', 'text')
        ->add('country', 'text')
        ->add('email', 'email')
        ->add('certificate', 'text')
        ->add('provider', 'entity', array(
              'class' => 'YourCustomBundle:Partner',
        ))
        ->getForm();

        // Populate
        $form->bindRequest($request);

        // Check
        if($form->isValid()) {
            // Fill the entity
            $registration->setName($form['name']->getData());
            $registration->setCountry($form['country']->getData());
            $registration->setEmail($form['email']->getData());
            $registration->setCertificate($form['certificate']->getData());
            $registration->setProvider($form['provider']->getData());
            $em->persist($registration);
            $em->flush();
        }   

    }
    return $this->render('YourCustomBundle:Default:index.html.twig',array(
            'form' => $form->createView(),
    ));
}