2015-08-28 1 views
3

Je travaille avec le Sonata Admin bundle pour le backend de mon site web.La classe '... Entité Utilisateur' n'a pas de méthode 'getGenderList'

Mon table utilisateur dans ma base de données ressemble à ceci:

id (PK) 
username 
email 
password 
salt 
last_login 
created_at 
company_id (FK) 

Mon entité utilisateur se présente comme suit:

<?php 

namespace MyBundle\Entity; 

use FOS\UserBundle\Entity\User as BaseUser; 
//use Sonata\UserBundle\Entity\BaseUser as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* User 
* 
* @ORM\Table(name="user", indexes={@ORM\Index(name="fk_user_company1_idx", columns={"company_id"})}) 
* @ORM\Entity 
*/ 
class User extends BaseUser 
{ 
    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="created_at", type="datetime", nullable=true) 
    */ 
    protected $createdAt; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    protected $id; 

    /** 
    * @var \MyBundle\Entity\Company 
    * 
    * @ORM\ManyToOne(targetEntity="MyBundle\Entity\Company") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="company_id", referencedColumnName="id") 
    * }) 
    */ 
    protected $company; 

    public function __construct() 
    { 
     parent::__construct(); 
     // your own logic 
    } 

    /** 
    * Set username 
    * 
    * @param string $username 
    * @return User 
    */ 
    public function setUsername($username) 
    { 
     $this->username = $username; 

     return $this; 
    } 

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

    /** 
    * Set email 
    * 
    * @param string $email 
    * @return User 
    */ 
    public function setEmail($email) 
    { 
     $this->email = $email; 

     return $this; 
    } 

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

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

     return $this; 
    } 

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

    /** 
    * Set salt 
    * 
    * @param string $salt 
    * @return User 
    */ 
    public function setSalt($salt) 
    { 
     $this->salt = $salt; 

     return $this; 
    } 

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

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

    /** 
    * Set company 
    * 
    * @param \MyBundle\Entity\Company $company 
    * @return User 
    */ 
    public function setCompany(\MyBundle\Entity\Company $company = null) 
    { 
     $this->company = $company; 

     return $this; 
    } 

    /** 
    * Get company 
    * 
    * @return \MyBundle\Entity\Company 
    */ 
    public function getCompany() 
    { 
     return $this->company; 
    } 
} 

Maintenant, quand je vais au "Modifier le compte" page Je reçois l'erreur suivante:

Warning: call_user_func() expects parameter 1 to be a valid callback, class 'MyBundle\Entity\User' does not have a method 'getGenderList' 

Je n'ai pas de sexe dans ma table utilisateur dans ma base de données. Comment puis-je réparer cela?

MISE À JOUR:

Quand je change use FOS\UserBundle\Entity\User as BaseUser;-use Sonata\UserBundle\Entity\BaseUser as BaseUser;. Puis j'obtiens l'erreur suivante:

An exception occurred while executing 'SELECT t0.username AS username1, t0.username_canonical AS username_canonical2, t0.email AS email3, t0.email_canonical AS email_canonical4, t0.enabled AS enabled5, t0.salt AS salt6, t0.password AS password7, t0.last_login AS last_login8, t0.locked AS locked9, t0.expired AS expired10, t0.expires_at AS expires_at11, t0.confirmation_token AS confirmation_token12, t0.password_requested_at AS password_requested_at13, t0.roles AS roles14, t0.credentials_expired AS credentials_expired15, t0.credentials_expire_at AS credentials_expire_at16, t0.created_at AS created_at17, t0.updated_at AS updated_at18, t0.date_of_birth AS date_of_birth19, t0.firstname AS firstname20, t0.lastname AS lastname21, t0.website AS website22, t0.biography AS biography23, t0.gender AS gender24, t0.locale AS locale25, t0.timezone AS timezone26, t0.phone AS phone27, t0.facebook_uid AS facebook_uid28, t0.facebook_name AS facebook_name29, t0.facebook_data AS facebook_data30, t0.twitter_uid AS twitter_uid31, t0.twitter_name AS twitter_name32, t0.twitter_data AS twitter_data33, t0.gplus_uid AS gplus_uid34, t0.gplus_name AS gplus_name35, t0.gplus_data AS gplus_data36, t0.token AS token37, t0.two_step_code AS two_step_code38, t0.id AS id39, t0.company_id AS company_id40 FROM user t0 WHERE t0.id = ? LIMIT 1' with params 1 :

SQLSTATE[42S22]: Column not found: 1054 Unknown column 't0.updated_at' in 'field list'

Comment pourrais-je résoudre ce problème?

+0

Vous avez implémenter la méthode manquante dans votre classe. C'est tout ce que le message d'erreur vous dit. –

Répondre

2

Votre classe d'utilisateurs étend celle de FOSUserBundle au lieu de SonataUserBundle. Vous devez changer:

//use FOS\UserBundle\Entity\User as BaseUser; 
use Sonata\UserBundle\Entity\BaseUser as BaseUser; 

Vérifier https://github.com/sonata-project/SonataUserBundle/issues/459

Edit: si vous ne voulez pas utiliser cette classe (il y a beaucoup de champs inutiles dans celui-ci), alors vous devez créer votre propre classe d'administration pour votre entité utilisateur. Cette page a un guide complet pour cela: http://m2mdas.github.io/blog/2013/11/18/integrate-fosuserbundle-and-sonatauserbundle-easily/

Mise à jour après votre mise à jour: après avoir changé la classe de votre entité étend, vous devez mettre à jour votre schéma de base de données pour votre modèle:

php app/console doctrine:schema:update --force 
+0

J'ai mis à jour mon sujet, existe-t-il un moyen de contourner cela sans écrire votre propre classe d'administration? – nielsv

+0

J'ai mis à jour ma réponse. Vous devez soit étendre la classe appropriée, soit écrire votre propre classe d'administration. – Derek