【发布时间】:2017-03-14 12:36:53
【问题描述】:
我正在尝试将实体值保存到 MySQL,但即使我更改了值,它们也始终保存为占位符数据。如果我删除占位符数据,则这些值始终保存为 NULL。
这是我的实体类:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Message
*
* @ORM\Table(name="message")
* @ORM\Entity
*/
class Message
{
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=50, nullable=true)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="addy", type="string", length=50, nullable=true)
*/
private $addy;
/**
* @var string
*
* @ORM\Column(name="subject", type="string", length=50, nullable=true)
*/
private $subject;
/**
* @var string
*
* @ORM\Column(name="body", type="string", length=200, nullable=true)
*/
private $body;
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* Set name
*
* @param string $name
*
* @return Message
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set addy
*
* @param string $addy
*
* @return Message
*/
public function setAddy($addy)
{
$this->addy = $addy;
return $this;
}
/**
* Get addy
*
* @return string
*/
public function getAddy()
{
return $this->addy;
}
/**
* Set subject
*
* @param string $subject
*
* @return Message
*/
public function setSubject($subject)
{
$this->subject = $subject;
return $this;
}
/**
* Get subject
*
* @return string
*/
public function getSubject()
{
return $this->subject;
}
/**
* Set body
*
* @param string $body
*
* @return Message
*/
public function setBody($body)
{
$this->body = $body;
return $this;
}
/**
* Get body
*
* @return string
*/
public function getBody()
{
return $this->body;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
}
这是我的控制器:
/**
* @Route("/index.html.twig", name="new")
*/
public function newAction(Request $request)
{
// create a message instance
$message = new Message();
//assign some placeholder data
$message->setName('Billy');
$message->setAddy('ok@hotmail.com');
$message->setSubject('Notice');
$message->setBody('Practice Delayed');
//method creates and renders form
$form = $this->createFormBuilder($message)
->add('name', TextType::class,array('label' => 'From'))
->add('addy', TextType::class,array('label' => 'To'))
->add('subject', TextType::class)
->add('body', TextType::class)
->add('save', SubmitType::class, array('label' => 'Send', 'attr' => array('class' => 'btn btn-danger btn-lg')))
->getForm();
//method checks if the form is submitted
$form->handleRequest($request);
$message = $form->getData();
$em = $this->getDoctrine()->getManager();
$em->persist($message);
$em->flush();
return $this->render('default/index.html.twig', array('form' => $form->createView()));
}
【问题讨论】:
-
$form->handleRequest 不检查提交的表单。你忘记了 $form->isValid()。 symfony.com/doc/current/forms.html#handling-form-submissions。除非只在 POST 上调用 newAction?
-
如果我添加 $form->isVald() 验证,则根本不会保存到数据库中。
-
新建一个项目并浏览文档中的示例。在这一点上很难看出你在做什么或没有做错什么。 $message = $form->getData();行不是必需的。
-
我发现如果我在树枝边界类中使用 {{ (form(form) }} 而不是扩展的表单标签,它会起作用。
标签: php mysql symfony doctrine twig