试图更新我的实体,不幸的是没有使用学说会生成crud功能(必须更改我没有写的东西)。我终于将数据收到了我的表单,但是它不能保存更改(此外,它并没有像人们怀疑那样创建一个新实体)。当我单击"保存"时,我总是返回到具有编辑实体表格的页面。检查方法是否是帖子,是。
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);
# DoctrineCommonUtilDebug::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);
# DoctrineCommonUtilDebug::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) {
您的代码在其他分支上什么都不做。
2:
$request = $this->get('request');
您已经将请求参数注入到操作中。这条线是多余的。
3:
$form->bind($request);
自2.3以来,这是不推荐的。使用$ form-> handlerequest($请求)。
4:
$em->flush();
您正在冲洗实体经理,但没有任何持久,所以什么都不会发生。您必须先用$ em-> persist($ entity)
首先坚持实体5:
if ($request->getMethod() == 'POST') {
方法$ form-> iSvalid()检查此检查,因此检查帖子是多余的。
就是这样。希望它能有所帮助。
这里最有可能的问题是AbstractType定义您的表单 uperveweekChangeType )。
为了映射您需要设置" data_class"的实体的表单数据。
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(
array(
'data_class' => ' AcmeStoreBundleEntityProduct',
)
);
}
然后在您的控制器内部调用:
$form->handleRequest($request);
这将把请求绑定到您的表格。
仅在调用时:
$form->isValid()
表格中的数据(如果有效)将在实体上映射。
$em->persist($entity);
在这种情况下是超级群体,因为学说 UNITYOFWORK已经"知道"从存储库中获得的实体。只是调用
$em->flush($entity);
作为旁注,请记住,仅冲洗所需的实体是可取的(如果可能的话),以避免出乎意料的行为。
问候。