0

Propel を使用してフォームを作成しました。フォームは正常に送信され、検証されます。$user オブジェクトをコミットしようとすると問題が発生します - MappingException が発生します。$user への以前の参照は問題ないように見えるので、これがどこから来ているのか本当にわかりません。

コメント行はいくつかのフォーム ガイドから取られていますが、空の行をデータベースに挿入していることに注意してください (ただし、$user の var_dump はすべての情報を持っていることを示しています。別。

これが私のコードです:

namespace LifeMirror\APIBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use LifeMirror\APIBundle\Model\Users;
use LifeMirror\APIBundle\Model\UsersQuery;
use LifeMirror\APIBundle\Form\Type\UsersType;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use FOS\RestBundle\View\View;

class RegisterController extends Controller
{
    public function indexAction()
    {
        return $this->processForm(new Users());
    }

    private function processForm(Users $user)
    {
        $statusCode = $user->isNew() ? 201 : 204;
        $em = $this->getDoctrine()->getEntityManager();
        $form = $this->createForm(new UsersType(), $user);
        //die(phpinfo());
        $form->bind(array(
            "firstName" => $this->getRequest()->request->get('firstName'),
            "lastName" => $this->getRequest()->request->get('lastName'),
            "email" => $this->getRequest()->request->get('email'),
            "password" => $this->getRequest()->request->get('password'),
            "dob" => array(
                "year" => json_decode($this->getRequest()->request->get('dob'))->year,
                "month" => json_decode($this->getRequest()->request->get('dob'))->month,
                "day" => json_decode($this->getRequest()->request->get('dob'))->day
            ),
            "location" => $this->getRequest()->request->get('location'),
            "tutorialWatched" => $this->getRequest()->request->get('tutorialWatched'),
            "challengeEmails" => $this->getRequest()->request->get('challengeEmails'),
            "mailingList" => $this->getRequest()->request->get('mailingList')
        ));

        if ($form->isValid()) {
            //$user->save();
            $em->persist($user);
            $em->flush();

            $response = new Response();
            $response->setStatusCode($statusCode);
            return $response;
        }
        $view = View::create($form, 400);
        $view->setFormat('json');
        return $view;
    }
}
4

2 に答える 2

0

doctrine を使用して Propel オブジェクトを永続化しようとしているようです。

Model\Usersクラスにドクトリンマッピングを追加する場合、理論的に可能であっても、それは確かにあなたが望むものではありません。

あなたが確かに望むのは、$userの状態を永続化することです:

if ($form->isValid()) {
    $user->save(); // propel object implements Active Record pattern, they can save themselves, no doctrine entityManager needed.
}
于 2013-01-29T13:48:49.337 に答える
0

フィールド名が などであることを確認しますfirstNamelastName? 通常、Propel は大文字のキャメルケースでフィールド名を生成しFirstNameますLastName。フィールド名が正確に一致しない場合、Propel は値を割り当てないため、空のINSERT. User次のようにフィールド名のリストをダンプできます。

var_dump(BaseUserPeer::getFieldNames());
于 2013-01-29T18:34:39.820 に答える