Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony2“;错误:对非对象调用成员函数toArray();从数据库加载角色时_Symfony - Fatal编程技术网

Symfony2“;错误:对非对象调用成员函数toArray();从数据库加载角色时

Symfony2“;错误:对非对象调用成员函数toArray();从数据库加载角色时,symfony,Symfony,我已经为此奋斗了好几个小时了。我在Symfony 2.5中构建了一个应用程序,当我以用户身份登录时,我收到以下错误: FatalErrorException:错误:对 /var/www/cwwa/src/cwwa/CoreBundle/Entity/Users.php行中的非对象 402 在402行,我有以下代码: /** * @inheritDoc */ public function getRoles() { //return array('ROLE_CUSTOMER_USER'

我已经为此奋斗了好几个小时了。我在Symfony 2.5中构建了一个应用程序,当我以用户身份登录时,我收到以下错误:

FatalErrorException:错误:对 /var/www/cwwa/src/cwwa/CoreBundle/Entity/Users.php行中的非对象 402

在402行,我有以下代码:

/**
 * @inheritDoc
 */
public function getRoles()
{
    //return array('ROLE_CUSTOMER_USER');
    return $this->roles->toArray();
}
如果我注释掉
return$this->roles->toArray()
并将其替换为上面的行,则我的用户可以毫无问题地登录到系统

现在,我看到其他人的主要问题是在PHP5.4服务器上运行Symfony2。我的笔记本电脑一直在运行,直到我把它降级到5.3。这并没有解决问题

我使用的另一种方法是替换
return$this->roles->toArray()
返回$this->roles,我得到这个错误:

可捕获致命错误:参数4传递给 Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken::\uu构造() 必须是数组,给定整数,在中调用 /var/www/cwwa/vendor/symfony/symfony/src/symfony/Component/Security/Core/Authentication/Provider/UserAuthenticationProvider.php 第96行,并在中定义 /var/www/cwwa/vendor/symfony/symfony/src/symfony/Component/Security/Core/Authentication/Token/UsernamePasswordToken.php 第36行

我由此假设系统正在从数据库中检索一个值

为了安全起见,我的数据库使用了两个表。一个用户表和另一个是角色表。我已将用户表和角色表的实体文件包括在下面:

Users.php

<?php

namespace CWWA\CoreBundle\Entity;

use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
 * Users
 *
 * @ORM\Table(name="users")
 * @ORM\Entity(repositoryClass="CWWA\CoreBundle\Entity\Users")
 */
class Users implements UserInterface, \Serializable
{

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


    /**
     * @var string
     *
     * @ORM\Column(name="username", type="string", length=500, nullable=false)
     */
    private $username;

    /**
     * @var string
     *
     * @ORM\Column(name="email", type="string", length=500, nullable=false)
     */
    private $email;

    /**
     * @var string
     *
     * @ORM\Column(name="password", type="string", length=500, nullable=false)
     */
    private $password;

    /**
     * @var string
     *
     * @ORM\Column(name="salt", type="string", length=500, nullable=false)
     */
    private $salt;

    /**
     * @var string
     *
     * @ORM\Column(name="first_name", type="string", length=125, nullable=false)
     */
    private $firstName;

    /**
     * @var string
     *
     * @ORM\Column(name="surname", type="string", length=45, nullable=false)
     */
    private $surname;

    /**
     * @var integer
     *
     * @ORM\Column(name="customer", type="integer", nullable=false)
     */
    private $customer;

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

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

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

    /**
     * @var integer
     *
     * @ORM\Column(name="access_list", type="integer", nullable=false)
     */
    private $accessList;

    /**
     * @ORM\ManyToMany(targetEntity="Roles", inversedBy="roles")
     *
     */
    private $roles;

    public function __construct()
    {
        return $this->isActive = true;
        return $this->salt = md5(uniqid(null, true));
        return $this->roles = new ArrayCollection();
    }

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

    /**
     * Set username
     *
     * @param string $username
     * @return Users
     */
    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 Users
     */
    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 Users
     */
    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 Users
     */
    public function setSalt($salt)
    {
        $this->salt = $salt;

        return $this;
    }

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

    /**
     * Set firstName
     *
     * @param string $firstName
     * @return Users
     */
    public function setFirstName($firstName)
    {
        $this->firstName = $firstName;

        return $this;
    }

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

    /**
     * Set surname
     *
     * @param string $surname
     * @return Users
     */
    public function setSurname($surname)
    {
        $this->surname = $surname;

        return $this;
    }

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

    /**
     * Set customer
     *
     * @param integer $customer
     * @return Users
     */
    public function setCustomer($customer)
    {
        $this->customer = $customer;

        return $this;
    }

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

    /**
     * Set created
     *
     * @param \DateTime $created
     * @return Users
     */
    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 Users
     */
    public function setIsActive($isActive)
    {
        $this->isActive = $isActive;

        return $this;
    }

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

    /**
     * Set blocked
     *
     * @param boolean $blocked
     * @return Users
     */
    public function setBlocked($blocked)
    {
        $this->blocked = $blocked;

        return $this;
    }

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

    /**
     * Set accessList
     *
     * @param integer $accessList
     * @return Users
     */
    public function setAccessList($accessList)
    {
        $this->accessList = $accessList;

        return $this;
    }

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

    /**
     * Set roles
     *
     * @param integer $roles
     * @return Users
     */
    public function setRoles($roles)
    {
        $this->roles = $roles;

        return $this;
    }


    /**
     * @inheritDoc
     */
    public function getRoles()
    {
        //return array('ROLE_CUSTOMER_USER');
        return $this->roles;
    }

    /**
     * @inheritDoc
     */
    public function eraseCredentials()
    {
    }

    /**
     * @see \Serializable::serialize()
     */
    public function serialize()
    {
        return serialize(array(
            $this->id,
        ));
    }

    /**
     * @see \Serializable::unserialize()
     */
    public function unserialize($serialized)
    {
        list (
            $this->id,
        ) = unserialize($serialized);
    }

    public function isEqualTo(UserInterface $user)
    {
        return $this->id === $user->getId();
    }

}
<?php

namespace CWWA\CoreBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Security\Core\Role\RoleInterface;

/**
 * Roles
 *
 * @ORM\Table(name="roles")
 * @ORM\Entity
 */
class Roles implements RoleInterface
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="names", type="string", length=30, nullable=false)
     */
    private $name;

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

    /**
     * @ORM\ManyToMany(targetEntity="Users", mappedBy="roles")
     */
    private $users;

    public function __construct()
    {
        $this->users = new ArrayCollection();
    }



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

    /**
     * Set names
     *
     * @param string $names
     * @return Roles
     */
    public function setNames($names)
    {
        $this->names = $names;

        return $this;
    }

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

    /**
     * Set role
     *
     * @param string $role
     * @return Roles
     */
    public function setRole($role)
    {
        $this->role = $role;

        return $this;
    }

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

}

在您的
用户
实体中,
角色
字段应该由
用户
反转(实体另一侧的字段)


您可能需要更新数据库。

我也遇到类似问题。
toArray()
方法不起作用,因为
$this->roles
不是
ArrayCollection
的实例,而是一个整数。我不太明白为什么在
Users
构造函数中有三个
return
语句;尝试先去掉这些,然后只设置需要设置的属性:

public function __construct()
{
    $this->isActive = true;
    $this->salt = md5(uniqid(null, true));
    $this->roles = new ArrayCollection();
}

现在,
toArray()
方法应该像
$this->roles一样工作
应该是一个
ArrayCollection()
。请记住,Symfony安全层需要一个角色对象数组或字符串数组。

我已经对我的用户实体进行了更改,但仍然收到错误。当你说我可能需要更新数据库时,你的确切意思是什么?
public function __construct()
{
    $this->isActive = true;
    $this->salt = md5(uniqid(null, true));
    $this->roles = new ArrayCollection();
}