Symfony2表单和Doctrine 2 - 在分配的实体中创建外键失败

时间:2015-02-18 22:20:03

标签: symfony doctrine-orm

我正在尝试将我的数据添加到我的数据库中,我试图不使用formbuilder,在我将所有表单放入控制器,并且我的实体包含外键但我得到了这个错误: 属性“id_classe”和方法“getIdClasse()”,“idClasse()”,“isIdClasse()”,“hasIdClasse()”,“__ get()”都不存在,并且在类“MyApp”中具有公共访问权限SchoolBundle \实体\ Etudiant”。 这是我在控制器中的功能:

public function AjoutAction(Request $request)
{   $classe=new Etudiant();
$formBuilder = $this->get('form.factory')->createBuilder('form', $classe);    
$formBuilder
  ->add('prenom', 'text')
  ->add('nom', 'text')
  ->add('Cin', 'integer')
  ->add('id_classe', 'integer')
  ->add('save',      'submit')
;
$form = $formBuilder->getForm();
if ($form->handleRequest($request)->isValid()) {
    $objToPersist = $form->getData();
    $em = $this->getDoctrine()->getManager();
    $em->persist($objToPersist);
    $em->flush();
} 
return $this->render('MyAppSchoolBundle:Etudiant:ajout.html.twig',array(
    'form' => $form->createView(),
));
}

这是我的实体     

namespace MyApp\SchoolBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
* @ORM\Entity
*/
 class Etudiant {

   /**
    * @ORM\id
    *@ORM\GeneratedValue
    *@ORM\Column(type="integer",name="ID_Etudiant")   
    */
private $Id;
/**
 *@ORM\Column{type="string",length=255}
 */
private $prenom;
/**
 *@ORM\Column{type="string",length=255}
 */

private $nom;
/**
 *@Assert\NotBlank
 *@ORM\Column(type="integer", unique=true)
 */

private $cin; //unique ne fonctionne pas qu'avec les assert
/**
 * @ORM\ManyToOne(targetEntity="Classes",cascade={"ALL"})
 */
private $id_classe;
function getId() {
    return $this->Id;
}

function getPrenom() {
    return $this->prenom;
}

function getNom() {
    return $this->nom;
}

function setId($Id) {
    $this->Id = $Id;
}

function setPrenom($prenom) {
    $this->prenom = $prenom;
}

function setNom($nom) {
    $this->nom = $nom;
}

function getCin() {
    return $this->cin;
 }

 function setCin($cin) {
    $this->cin = $cin;
 }

public function getId_classe() {
    return $this->id_classe;
}

function setId_classe($id_classe) {
    $this->id_classe = $id_classe;
}




}

1 个答案:

答案 0 :(得分:2)

在您的表单中,您有:

 ->add('id_classe', 'integer')

在您的实体中添加一个setter

public function setIdClasse($idClasse) {
    $this->id_classe = $idClasse;
}

修改

另外,建议:

1 始终为您的功能添加可见性(public function blabla()private function blabla()

2 首选使用驼峰案例(因此您的属性为$nomClasse$idClasse$id等。)

3 不是强制性的,但最好在你的二传手中返回对象

4 您的表示法不一致(请参阅表单构建器->add('nom', 'text') ->add('Cin', 'integer')

Getters和Setter通常如下所示:

public function getNomClasse() 
{
    return $this->nomClasse;
}

public function setNomClasse($nomClasse) 
{
    $this->nomClasse = $nomClasse;

    return $this;
}