使用AdvancedUserInterface的Symfony

使用AdvancedUserInterface的Symfony,symfony,login,doctrine,Symfony,Login,Doctrine,我正在尝试用Symfony2实现一个登录系统。我正在为我的用户实体实现AdvancedUserInterface,并且在尝试登录时不断出现以下错误。感谢您的帮助 错误: $user must be an instanceof UserInterface, an object implementing a __toString method, or a primitive string. 用户实体: <?php namespace Flc\UserBundle\Entity; use

我正在尝试用Symfony2实现一个登录系统。我正在为我的用户实体实现AdvancedUserInterface,并且在尝试登录时不断出现以下错误。感谢您的帮助

错误:

$user must be an instanceof UserInterface, an object implementing a __toString method, or a primitive string.
用户实体:

<?php

namespace Flc\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;
use Serializable;

/**
* User
*
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="Flc\UserBundle\Entity\UserRepository")
*/
class User implements AdvancedUserInterface, Serializable {

/**
 * @var integer
 *
 * @ORM\Column(name="userId", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $userId;

/**
 * @var string
 *
 * @ORM\Column(name="userEmail", type="string", length=50)
 */
private $userEmail;

/**
 * @var string
 *
 * @ORM\Column(name="userName", type="string", length=20)
 */
private $userName;

/**
 * @var string
 *
 * @ORM\Column(name="userPassword", type="string", length=60)
 */
private $userPassword;

/**
 * @var string
 *
 * @ORM\Column(name="userSalt", type="string", length=60, nullable=true)
 */
private $userSalt;

/**
 * @var string
 *
 * @ORM\Column(name="userFirstName", type="string", length=40)
 */
private $userFirstName;

/**
 * @var string
 *
 * @ORM\Column(name="userLastName", type="string", length=40)
 */
private $userLastName;

/**
 * @var string
 *
 * @ORM\Column(name="userPhone", type="string", length=10)
 */
private $userPhone;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="created", type="datetime")
 */
private $created;

/**
 * @var boolean
 *
 * @ORM\Column(name="isActive", type="boolean")
 */
private $isActive;

/**
 * @var array
 *
 * @ORM\Column(name="roles", type="json_array", nullable=true)
 */
private $roles;

#########################
## GETTER - SETTER FUNCTIONS ##
#########################

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

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

    return $this;
}

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

/**
 * 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 userPassword
 *
 * @param string $userPassword
 * @return User
 */
public function setUserPassword($userPassword) {
    $this->userPassword = $userPassword;

    return $this;
}

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

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

    return $this;
}

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

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

    return $this;
}

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

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

    return $this;
}

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

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

    return $this;
}

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

/**
 * Set created
 *
 * @param \DateTime $created
 * @return User
 */
public function setCreated($created) {
    $this->created = $created;

    return $this;
}

/**
 * Get created
 *
 * @return \DateTime 
 */
public function getCreated() {
    return $this->created;
}

/**
 * Set isActive
 *
 * @param boolean $isActive
 * @return User
 */
public function setIsActive($isActive) {
    $this->isActive = $isActive;

    return $this;
}

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

/**
 * Set roles
 *
 * @param boolean $roles
 * @return User
 */
public function setRoles(array $roles) {
    $this->roles = $roles;

    return $this;
}

#############################################
## USER INTERFACE FUNCTIONS IMPLEMENTATION ##
#############################################

public function getRoles() {
    #return $this->roles;

    $roles = $this->roles;
    $roles[] = 'ROLE_USER';

    return array_unique($roles);
}

public function eraseCredentials() {
    //will be implemented
}

public function getSalt() {
    return $this->getUserSalt();
}

public function getPassword() {
    return $this->getUserPassword();
}

public function isAccountNonExpired() {
    return true;
}

public function isAccountNonLocked() {
    return true;
}

public function isCredentialsNonExpired() {
    return true;
}

public function isEnabled() {
    return $this->isActive;
}

#####################################################
## SERIALIZABLE INTERFACE FUNCTIONS IMPLEMENTATION ##
#####################################################

public function serialize() {
    return serialize(array(
        $this->userId,
        $this->userName,
        $this->userPassword
    ));
}

public function unserialize($serialized) {
    list(
            $this->userId,
            $this->userName,
            $this->userPassword) = unserialize($serialized);
}
}
尝试在您的用户实体上添加_utoString方法:

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

在用户存储库中,您需要替换:

public function findOneByUsernameOrEmail($username) {
    return $this->createQueryBuilder('u')
                    ->andWhere('u.userName = :username OR u.userEmail = :email')
                    ->setParameter('username', $username)
                    ->setParameter('email', $username)
                    ->getQuery()
                    ->getOneOrNullResult();
}

public function loadUserByUsername($username) {
    //$user = $this->findOneByUsernameOrEmail($username);
    $user = $this->findOneBy(array("userName"=>$username));
    if (!$user) {
        throw new UsernameNotFoundException('No user found for ' . $username);
    }
    return $user;
}
与:

public function loadUserByUsername($username)
{
    $q = $this
        ->createQueryBuilder('u')
        ->where('u.username = :username OR u.email = :email')
        ->setParameter('username', $username)
        ->setParameter('email', $username)
        ->getQuery();

    try {
        $user = $q->getSingleResult();
    } catch (NoResultException $e) {
        throw new UsernameNotFoundException(sprintf('Unable to find an active admin AcmeUserBundle:User object identified by "%s".', $username), 0, $e);
    }

    return $user;
}
public function findOneByUsernameOrEmail($username) {
    return $this->createQueryBuilder('u')
                    ->andWhere('u.userName = :username OR u.userEmail = :email')
                    ->setParameter('username', $username)
                    ->setParameter('email', $username)
                    ->getQuery()
                    ->getOneOrNullResult();
}

public function loadUserByUsername($username) {
    //$user = $this->findOneByUsernameOrEmail($username);
    $user = $this->findOneBy(array("userName"=>$username));
    if (!$user) {
        throw new UsernameNotFoundException('No user found for ' . $username);
    }
    return $user;
}
public function loadUserByUsername($username)
{
    $q = $this
        ->createQueryBuilder('u')
        ->where('u.username = :username OR u.email = :email')
        ->setParameter('username', $username)
        ->setParameter('email', $username)
        ->getQuery();

    try {
        $user = $q->getSingleResult();
    } catch (NoResultException $e) {
        throw new UsernameNotFoundException(sprintf('Unable to find an active admin AcmeUserBundle:User object identified by "%s".', $username), 0, $e);
    }

    return $user;
}