1

フォームを送信すると、次のエラーが表示されます。

クラス Symfony\Component\Form\Form は有効なエンティティまたはマップされたスーパー クラスではありません。

この問題は、コントローラーのデータベースにデータを永続化しようとしていることに起因しています。コードのその部分を非表示にすると、フォームの送信に問題はありません。Symfony 2.0.16 を使用しています

エンティティはこちら

<?php

namespace Acme\FormsBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Acme\FormsBundle\Entity\UserAccount
 */
class UserAccount {
/**
 * @var integer $id
 */
private $id;

/**
 * @var string $user_id
 */
private $user_id;

/**
 * @var string $mail
 */
private $mail;

/**
 * @var string $password
 */
private $password;

/**
 * @var string $role
 */
private $role;

/**
 * @var string $pseudo
 */
private $pseudo;

/**
 * @var string $nom
 */
private $nom;

/**
 * @var string $prenom
 */
private $prenom;

/**
 * @var string $sexe
 */
private $sexe;

/**
 * @var text $freetext
 */
private $freetext;

/**
 * @var boolean $status
 */
private $status;

/**
 * Get id
 *
 * @return integer
 */
public function getId() {
    return $this -> id;
}

/**
 * Set user_id
 *
 * @param string $userId
 */
public function setUser_id($user_id) {
    $this -> user_id = $user_id;
}

/**
 * Get user_id
 *
 * @return string
 */
public function getUser_id() {
    return $this -> user_id;
}

/**
 * Set mail
 *
 * @param string $mail
 */
public function setMail($mail) {
    $this -> mail = $mail;
}

/**
 * Get mail
 *
 * @return string
 */
public function getMail() {
    return $this -> mail;
}

/**
 * Set password
 *
 * @param string $password
 */
public function setPassword($password) {
    $this -> password = $password;
}

/**
 * Get password
 *
 * @return string
 */
public function getPassword() {
    return $this -> password;
}

/**
 * Set role
 *
 * @param string $role
 */
public function setRole($role) {
    $this -> role = $role;
}

/**
 * Get role
 *
 * @return string
 */
public function getRole() {
    return $this -> role;
}

/**
 * Set pseudo
 *
 * @param string $pseudo
 */
public function setPseudo($pseudo) {
    $this -> pseudo = $pseudo;
}

/**
 * Get pseudo
 *
 * @return string
 */
public function getPseudo() {
    return $this -> pseudo;
}

/**
 * Set nom
 *
 * @param string $nom
 */
public function setNom($nom) {
    $this -> nom = $nom;
}

/**
 * Get nom
 *
 * @return string
 */
public function getNom() {
    return $this -> nom;
}

/**
 * Set prenom
 *
 * @param string $prenom
 */
public function setPrenom($prenom) {
    $this -> prenom = $prenom;
}

/**
 * Get prenom
 *
 * @return string
 */
public function getPrenom() {
    return $this -> prenom;
}

/**
 * Set sexe
 *
 * @param string $sexe
 */
public function setSexe($sexe) {
    $this -> sexe = $sexe;
}

/**
 * Get sexe
 *
 * @return string
 */
public function getSexe() {
    return $this -> sexe;
}

/**
 * Set freetext
 *
 * @param text $freetext
 */
public function setFreetext($freetext) {
    $this -> freetext = $freetext;
}

/**
 * Get freetext
 *
 * @return text
 */
public function getFreetext() {
    return $this -> freetext;
}

/**
 * Set status
 *
 * @param boolean $status
 */
public function setStatus($status) {
    $this -> status = $status;
}

/**
 * Get status
 *
 * @return boolean
 */
public function getStatus() {
    return $this -> status;
}

}

コントローラーはこちら

namespace Acme\FormsBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Acme\FormsBundle\Entity\UserAccount;

class DefaultController extends Controller {

public function newUserAction(Request $request) {
    $newUser = new UserAccount();
    $newUser -> setUser_id('');
    $newUser -> setRole('');
    $newUser -> setNom('');
    $newUser -> setPrenom('');
    $newUser -> setSexe('');
    $newUser -> setFreetext('');
    $newUser -> setStatus('');

    $newUserForm = $this -> createFormBuilder($newUser)
                -> add('pseudo', 'text')
                -> add('mail', 'email')
                -> add('password', 'password')
                -> getForm();

    //if the form has been submitted
    if ($request->getMethod() == 'POST') {
        $newUserForm->bindRequest($request);

        if ($newUserForm->isValid()) {
            //Perform some actions
            $em = $this->getDoctrine()->getEntityManager();
            $em->persist($newUserForm);
            $em->flush();

            //Prepare confirmation message
            $this->get('session')->setFlash('notice','Account successfully created');

            //redirect user
            return $this->redirect($this->generateUrl('AcmeWelcomeBundle_homepage'));
        }
    }

    return $this -> render('AcmeFormsBundle:Default:newUser.html.twig', array('form' => $newUserForm -> createView(), ));
}
}

私はこれを理解することはできません。

4

1 に答える 1

2

$newUserフォーム自体ではなく、オブジェクトを永続化する必要があります。

于 2012-08-23T15:41:14.593 に答える