2016-01-18 11 views
5

Zunächst weiß ich, SO ist voller Fragen wie diese, aber ich habe versucht, verschiedene Konfigurationswerte nach diesen Antworten ohne Glück zu kombinieren.FOSUserBundle: Unbekanntes Feld: usernameCanonical

ich FOSUserBundle mit meinem eigenen Benutzer Klasse bin mit und wenn submiting Login-Formular ich diesen Fehler:

Unrecognized field: usernameCanonical

Hier sind einige Bits von meinem Code:

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 

Einige Variationen tested include Einstellung auto_mapping: false und/oder unkommentiert mappings.FOSUserBundle: ~

Dies ist meine Benutzerklasse:

<?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); 
    } 

} 

Login (layout.html.twig tatsächlich) Vorlage außer Kraft gesetzt wurde, und macht anscheinend richtig, meine Versionen sind:

  • Symonfy: Symfony Version 2.8.2 - app/dev/debug
  • „friendsofsymfony/Benutzer-Bundle ":‚^ 1.3‘

console doctrine:schema:update ausgeführt worden ist und es keine Änderungen mehr erkennen, obwohl usernameCanonical oder E-Mail nicht existieren in der DB-Tabelle.

Dank

+0

Der obige Code enthält keine 'email' oder' usernameCanonical' Eigenschaft/Feld. – felipsmartins

+0

Sie sollen von 'BaseUser'-Klasse geerbt werden –

+0

BTW, 'Doktrin: Schema: Update' erkennt diese Felder nicht, da sie nicht in DB existieren –

Antwort