symfony - 无法更新实体 Symfony2

标签 symfony doctrine-orm crud

尝试更新我的实体,不幸的是没有使用 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/

相关文章:

php - 设置选择字段 Symfony FormType 的默认值

php - "Argument 1 passed to ApiPlatform\Core\Bridge\Doctrine\Orm\Metadata\Property\DoctrineOrmPropertyMetadataFactory::__construct() must be an instance..."

Symfony2 : Handling form submissions

php - 如何确定 Doctrine 2 中的表关系是双向的还是单向的?

php - Doctrine2 导致网站速度变慢

c# - 使用 Linq2Sql 在 C# asp.net MVC 中创建和更新多对多关系

symfony - 取消prePersist中的保存或更新

php - Zend Framework 2、Doctrine 2 以及业务逻辑适合的位置

asp.net - 使用 Web API 和数据库优先策略构建 ASP.Net 应用程序

python - 如何在 Django Rest Framework 的 View 集中使用更新方法并执行一些任务(如发送邮件)?