0

マッピングとコントローラー アクションが機能しない理由を知りたいと思っています。これについては、エンティティとデータベース スキーマについて説明した以前の投稿を参照する必要があります。これ以上の更新がなかったため、新しい投稿を開始する必要があり、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
            );
    }

これは基本的に、エンティティを 2 つのテーブル (team テーブルと teamPlayer テーブル) に保存するためにコントローラーで行っていることです。既にプレーヤー テーブルにはデータが入力されています。そこで、プレーヤーをチームに追加し、その値をこれら 2 つのテーブルに割り当てたいと思います。

今、私は自分のフォームを見ることができ、データを入力して送信を押しても何も起こらず、アクションなしでフォームを見ることができます。データがデータベースに正常に保存されたら、発生していないインデックス ページに再ルーティングします。

マッピングセクションまたはコントローラー側でエラーが発生していることを指摘していただければ幸いです。

特にDoctrine 2の公式ドキュメントはグローバルすぎて、私の要件に対して特に明確ではありません.

4

1 に答える 1

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 エンティティをデバッグするのに便利だと思います。 

ps:あなたのエンティティをまだ深く読んでいません

于 2012-10-13T18:57:56.373 に答える