复合和外键作为主键学说2 + zend框架2

时间:2012-10-05 09:48:56

标签: doctrine-orm zend-form zend-framework2

我一直想知道为什么我的映射和控制器操作无法正常工作。为此,我需要参考我之前的帖子,其中我描述了我的实体和数据库架构,可以找到here。我需要开始一个新的帖子,因为没有进一步的更新,我认为这是引起Doctrine + Zend Pros注意的唯一方法。

如我在上一篇文章中所述,我有一个Zend表单,用户可以输入teamId和teamName,他还可以选择从表单下拉列表中选择多个玩家,并可以将玩家分配给团队。所以基本上这是我用Doctrine和Zend实现的目标。为此,我编写了上一篇文章中描述的实体,现在我想从控制器中添加代码以保留实体。

控制器:

 public function addAction()
    {
        $form = new TeamForm($this->getEntityManager());

        $form->get('submit')->setAttribute('value', 'Add');

        $request = $this->getRequest();

        if ($request->isPost())
        {
            $team = new Team();
            $player = new Player();
            $teamPlayers = new TeamPlayer();

            $form->setInputFilter($typeset->getInputFilter());

            $form->setData($request->getPost());

            if ($form->isValid())
            {
                $team->populate($form->getData());

                $teamPlayers->setPlayer($player);
                $teamPlayers->setTeam($team);

                $this->getEntityManager()->persist($teamPlayers);

                $this->getEntityManager()->flush();

               //Reroute to the index page once the data is successfully added
            }
        }
        //return form array
        return array(
            'form' => $form
            );
    }

所以这基本上就是我在我的控制器中将实体保存到两个表(团队表和teamPlayer表)中,因为播放器表已经填充了数据。所以我想向团队添加玩家并在这两个表中分配这些值。

现在我可以看到我的表单,当我输入数据并按提交时没有发生任何事情,我可以看到没有动作的表单。当数据成功保存到数据库中后,我将其重新路由到未发生的索引页面。

任何帮助都将不胜感激,指出我在映射部分或控制器端出现的错误。

特别是来自Doctrine 2的官方文档过于全球化,特别是我的要求并不明确。

1 个答案:

答案 0 :(得分:0)

让我们尝试通过以下步骤更新此答案来解决它:

第1步: 你的话暗示我,你可能会在验证中遇到一些问题,所以让我们检查你是否传递了这个问题$form->isValid()

 if ($form->isValid())
            {
                $team->populate($form->getData());
                $teamPlayers->setPlayer($player);
                $teamPlayers->setTeam($team);
                $this->getEntityManager()->persist($teamPlayers);
                $this->getEntityManager()->flush();
               //Reroute to the index page once the data is successfully added
            }else{
         var_dump($form->getMessages());

}

我还建议你使用doctrine命令行:doctrine orm:validate-schema,这个命令可以帮助你检查你的实体映射是否正常加上你的数据库映射也没关系,我觉得调试你的doctrine2很方便2实体

ps:我还没有深入阅读你的实体