我有一个用户输入数据的表单。然后,当他们点击提交时,这些数据将被保存到数据库中。
唯一的问题是,它没有这样做。发生了什么,是当单击提交时,页面将重新加载,并且仍将显示在表单中输入的所有数据。我去检查数据库,记录还没有更新。
没有错误,但根据分析器,加载页面时会运行三个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>
如果您需要更多代码,我会提供。我认为这两段代码就是问题所在。
干杯!
答案 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(),
));
}