Я разрабатываю аутентификацию в Symfony2, и моя пользовательская сущность объединена с сущностью категории пользователя. Когда я пытаюсь войти в систему, Symfony выдает ошибку:

Примечание: serialize (): intusercategoryid, возвращенный как переменная-член из __sleep (), но не существует в строке 149 vendor / symfony / symfony / src / Symfony / Component / Security / Core / Authentication / Token / AbstractToken.php

Пользователь:

/**
 * Class User
 * @package UsersBundle\Entity
 */
class User implements UserInterface
{
    /**
     * @var integer $intuserid
     */
    private $intuserid;

    /**
     * @var string $varpassword
     */
    private $varpassword;

    /**
     * @var string $varsalt
     */
    private $varsalt;

    /**
     * @var mixed $category
     */
    private $category;

    /**
     * @return integer $intUserID.
     */
    public function getIntUserID()
    {
        return $this->intuserid;
    }

    // ......... //

    /**
     * @return UserCategory $category
     */
    public function getCategory()
    {
        return $this->category;
    }

    /**
     * @param int $value
     *
     * @return $this
     */
    public function setCategory($value = null)
    {
        $this->category = $value;

        return $this;
    }


    /**
     * Конструктор класса User
     */
    public function __construct()
    {
        $this->userRoles = new ArrayCollection();
        $this->category = new UserCategory();
        $this->timeregister = new \DateTime();
    }
}

Сущность категории пользователя:

/**
 * UserCategory
 */
class UserCategory
{
    /**
     * @var integer $intusercategoryid
     */
    private $intusercategoryid;

       // ...... //

    /**
     * Get intusercategoryid
     *
     * @return integer 
     */
    public function getIntUserCategoryId()
    {
        return $this->intusercategoryid;
    }
}
2
Dmitriy.Net 3 Фев 2014 в 10:17

1 ответ

Лучший ответ

Описание проблемы

Через несколько дней я обнаружил проблему. Проблема в моем доступе к переменным объекта (речь идет о частном ).

Я прочитал документацию по сериализации php и обнаружил, что:

К частным членам объекта добавляется имя класса перед именем члена; защищенные члены имеют перед именем члена "*". Эти добавленные значения имеют нулевые байты с обеих сторон.

Важный

В официальной документации symfony 2 поля сущностей создаются с частным доступом

Пример из документации:

// src/Acme/BlogBundle/Entity/BlogComment.php
namespace Acme\BlogBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Acme\BlogBundle\Entity\BlogComment
 *
 * @ORM\Table(name="blog_comment")
 * @ORM\Entity
 */
class BlogComment
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="bigint")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

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

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

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

    /**
     * @var BlogPost
     *
     * @ORM\ManyToOne(targetEntity="BlogPost")
     * @ORM\JoinColumn(name="post_id", referencedColumnName="id")
     */
    private $post;
}

Решение

Для устранения ошибки я изменил частный доступ на защищенный , и это сработало:

Пользователь:

/**
 * Class User
 * @package UsersBundle\Entity
 */
class User implements UserInterface
{
    /**
     * @var integer $intuserid
     */
    protected $intuserid;

    /**
     * @var string $varpassword
     */
    protected $varpassword;

    /**
     * @var string $varsalt
     */
    protected $varsalt;

    /**
     * @var mixed $category
     */
    protected $category;

    /**
     * @return integer $intUserID.
     */
    public function getIntUserID()
    {
        return $this->intuserid;
    }

    // ......... //

    /**
     * @return UserCategory $category
     */
    public function getCategory()
    {
        return $this->category;
    }

    /**
     * @param int $value
     *
     * @return $this
     */
    public function setCategory($value = null)
    {
        $this->category = $value;

        return $this;
    }


    /**
     * Конструктор класса User
     */
    public function __construct()
    {
        $this->userRoles = new ArrayCollection();
        $this->category = new UserCategory();
        $this->timeregister = new \DateTime();
    }
}

Сущность категории пользователя:

/**
 * UserCategory
 */
class UserCategory
{
    /**
     * @var integer $intusercategoryid
     */
    protected $intusercategoryid;

       // ...... //

    /**
     * Get intusercategoryid
     *
     * @return integer 
     */
    public function getIntUserCategoryId()
    {
        return $this->intusercategoryid;
    }
}
1
Dmitriy.Net 3 Фев 2014 в 12:12