尝试更新我的实体,不幸的是没有使用 Doctrines 生成 CRUD 功能(必须更改我没有写的内容)。 我终于将数据输入到我的表单中,但它只是不会保存更改(而且,它不会像人们可能怀疑的那样创建新实体)。 当我单击“保存”时,我总是返回到表单编辑实体的页面。 检查方法是否为 POST,是的。
if ($form->get('save')->isClicked()) {
似乎什么也没做,怎么可能?
这是我的其余操作:
/**
* Updates.
*
* @Route("/offerweekchange/{offerid}", name="offerweekchange")
* @Template("")
*/
public function offerweekchangeAction(Request $request, $offerid)
{
$request = $this->get('request');
if ($offerid) {
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('AlexanderBuerkleShopBundle:Promotion')->findOneBy(array('id' => $offerid));
$form = $this->createForm(new OfferWeekChangeType(), $entity);
# \Doctrine\Common\Util\Debug::dump($request->getMethod());
if ($form->get('save')->isClicked()) {
if ($request->getMethod() == 'POST') {
$form->bind($request);
if ($form->isValid()) {
$em->flush();
return $this->redirect($this->generateUrl('offerweeklist'));
}
}
}
return $this->render('AlexanderBuerkleShopBundle:OfferWeekList:offerweekchange.html.twig',
array('form' => $form->createView(), 'offerid' => $offerid, 'entity' => $entity));
}
}
任何帮助将不胜感激。
最佳答案
首先,这是代码的工作示例:
public function offerweekchangeAction(Request $request, $offerid)
{
if ($offerid) {
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('AlexanderBuerkleShopBundle:Promotion')->findOneBy(array('id' => $offerid));
$form = $this->createForm(new OfferWeekChangeType(), $entity);
$form->handleRequest($request);
# \Doctrine\Common\Util\Debug::dump($request->getMethod());
if ($form->isValid()) {
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('offerweeklist'));
}
return $this->render('AlexanderBuerkleShopBundle:OfferWeekList:offerweekchange.html.twig',
array('form' => $form->createView(), 'offerid' => $offerid, 'entity' => $entity));
}
}
其次,你这里有几个错误,我们一一分析一下:
1:
if ($offerid) {
您的代码在 else 分支上不执行任何操作。
2:
$request = $this->get('request');
您已经将请求参数注入(inject)到操作中。此行是多余的。
3:
$form->bind($request);
自 2.3 起已弃用。使用 $form->handleRequest($request) 来代替。
4:
$em->flush();
您正在刷新实体管理器,但没有任何内容被持久化,因此什么也不会发生。你必须首先使用 $em->persist($entity)
持久化实体5:
if ($request->getMethod() == 'POST') {
方法 $form->isValid() 也会检查这一点,因此检查 post 是多余的。
就是这样。希望对您有所帮助。
关于symfony - 无法更新实体 Symfony2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30117453/