2016-01-18 17 views
5

Prima di tutto, so che SO è pieno di domande come questa, ma ho provato a combinare diversi valori di configurazione in base a quelle risposte senza fortuna.FOSUserBundle: campo non riconosciuto: usernameCanonical

sto usando FOSUserBundle con la mia propria utente classe e quando submiting form di login ottengo questo errore:

Unrecognized field: usernameCanonical

Qui ci sono alcuni pezzi del mio codice:

doctrine: 
     auto_generate_proxy_classes: "%kernel.debug%" 
     naming_strategy: doctrine.orm.naming_strategy.underscore 
     auto_mapping: true 
     # mappings: 
     #  FOSUserBundle: ~ 
fos_user: 
    service: 
     mailer: fos_user.mailer.twig_swift 
    db_driver: orm 
    firewall_name: main 
    user_class: AppBundle\Entity\User 

alcune variazioni testato include l'impostazione auto_mapping: false e/o non commentante mappings.FOSUserBundle: ~

Questa è la mia classe utente:

<?php 

namespace AppBundle\Entity; 

use Symfony\Component\Security\Core\User\UserInterface; 
use Symfony\Component\Validator\Constraints as Assert; 

use FOS\UserBundle\Model\User as BaseUser; 

use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* AppBundle\Entity\User 
* 
* @ORM\Entity 
* @ORM\Table(name="user") 
*/ 
class User extends BaseUser implements UserInterface 
{ 
    const ROLE_DEFAULT = 'ROLE_ADMIN'; 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(type="string", length=100) 
    */ 
    protected $name; 

    /** 
    * @ORM\Column(type="string", length=40) 
    * @Assert\Email() 
    */ 
    protected $login; 

    /** 
    * @ORM\Column(type="string", length=255) 
    */ 
    protected $password; 

    /** 
    * @ORM\Column(type="string", length=255) 
    */ 
    protected $salt; 

    /** 
    * @ORM\Column(type="array", length=255) 
    */ 
    protected $roles; 

    /** 
    * Método requerido por la interfaz UserInterface 
    */ 
    public function equals(\Symfony\Component\Security\Core\User\UserInterface $user) 
    { 
     return $this->getLogin() == $user->getLogin(); 
    } 

    /** 
    * Método requerido por la interfaz UserInterface 
    */ 
    public function eraseCredentials() 
    { 
    } 

    /** 
    * Método requerido por la interfaz UserInterface 
    */ 
    public function getUsername() 
    { 
     return $this->getLogin(); 
    } 

    public function __toString() 
    { 
     return $this->getName(); 
    } 

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

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

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

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

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

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

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

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

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

    /** 
    * Adds a role to the user. 
    * 
    * @param string $role 
    */ 
    public function addRole($role) 
    { 
     $role = strtoupper($role); 
     if ($role === static::ROLE_DEFAULT) { 
      return; 
     } 

     if (!in_array($role, $this->roles, true)) { 
      $this->roles[] = $role; 
     } 
    } 

    /** 
    * Returns the user roles 
    * 
    * Implements SecurityUserInterface 
    * 
    * @return array The roles 
    */ 
    public function getRoles() 
    { 
     $roles = $this->roles; 

     foreach ($this->getGroups() as $group) { 
      $roles = array_merge($roles, $group->getRoles()); 
     } 

     // we need to make sure to have at least one role 
     $roles[] = static::ROLE_DEFAULT; 

     return array_unique($roles); 
    } 

    /** 
    * Set roles 
    * 
    * @param string $roles 
    */ 
    public function setRoles(array $roles) 
    { 
     $this->roles = $roles; 
    } 

    /** 
    * Never use this to check if this user has access to anything! 
    * 
    * Use the SecurityContext, or an implementation of AccessDecisionManager 
    * instead, e.g. 
    * 
    *   $securityContext->isGranted('ROLE_USER'); 
    * 
    * @param string $role 
    * @return Boolean 
    */ 
    public function hasRole($role) 
    { 
     return in_array(strtoupper($role), $this->getRoles(), true); 
    } 

} 

Accesso (layout.html.twig in realtà) modello è stato sovrascritto e apparentemente rende correttamente, le mie versioni sono:

  • Symonfy: versione 2.8.2 Symfony - app/dev/debug
  • "friendsofsymfony/user-fascio ": '^ 1.3'

console doctrine:schema:update è stato eseguito e non rilevare eventuali ulteriori modifiche, anche se usernameCanonical o e-mail non esistono nella tabella DB.

Grazie

+0

Il codice sopra non contiene alcun campo di proprietà 'email' o' usernameCanonical'. – felipsmartins

+0

Si suppone che siano ereditati dalla classe 'BaseUser' –

+0

BTW,' doctrine: schema: update' non rileva quei campi poiché non esistono nel DB –

risposta