无法更新实体 Symfony2



试图更新我的实体,不幸的是没有使用学说会生成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);

作为旁注,请记住,仅冲洗所需的实体是可取的(如果可能的话),以避免出乎意料的行为。

问候。

相关内容

  • 没有找到相关文章

最新更新