新的 Symfony2 用户类给出致命错误


New Symfony2 User Class gives Fatal Error

我正在尝试从security.yml中手动指定的用户移动到数据库用户。我已经阅读了 http://symfony.com/doc/current/book/security.html#loading-users-from-the-database 并实现了他们的示例,然后使用朋友的用户类对其进行了扩展。当我尝试运行php app/console doctrine:generate:entities时,出现以下错误:Class MyFreelancer'PortalBundle'Entity'User contains 7 abstract methods and must therefor be declared abstract or implement the remaining methods,然后是离开页面的方法列表。

我的代码如下:

<?php
namespace MyFreelancer'PortalBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
use Doctrine'Common'Collections'Criteria;
use Doctrine'Common'Collections'ArrayCollection;
use Symfony'Bridge'Doctrine'Validator'Constraints'UniqueEntity;
use Symfony'Component'Validator'Constraints as Assert;
use JMS'Serializer'Annotation as Ser;
use Gedmo'Mapping'Annotation as Gedmo;
use Symfony'Component'Security'Core'User'Role;
use Symfony'Component'Security'Core'User'UserInterface;
/**
 * User
 *
 * @ORM'Entity
 * @ORM'Table(name="users")
 * @Ser'ExclusionPolicy("all")
 */
class User implements UserInterface, 'Serializable
{
    /**
     * @var integer
     *
     * @ORM'Column(name="id", type="integer")
     * @ORM'Id
     * @ORM'GeneratedValue(strategy="AUTO")
     * @Ser'Expose
     */
    private $id;
/**
     * @var string
     *
     * @ORM'Column(name="role_id", type="integer")
     * @Assert'Range(min=1)
     */
    private $roleId;
    /**
     * @var string
     *
     * @ORM'Column(name="username", type="string", length=100)
     * @Assert'Length(min=3, max=100)
     * @Ser'Expose()
     */
    private $username;
    /**
     * @var string
     *
     * @ORM'Column(name="password", type="string", length=2048)
     * @Assert'Length(min=8, max=2048)
     */
    private $password;
    /**
     * @var string
     *
     * @ORM'Column(name="name", type="string", length=100)
     * @Assert'Length(min=3, max=100)
     * @Ser'Expose()
     */
    private $name;
    /**
     * @var string
     *
     * @ORM'Column(name="surname", type="string", length=100)
     * @Assert'Length(min=3, max=100)
     * @Ser'Expose()
     */
    private $surname;
    /**
     * @var string
     *
     * @ORM'Column(name="email", type="string", length=200)
     * @Assert'Email(checkMX=true)
     * @Ser'Expose()
     */
    private $email;
    /**
     * @var string
     *
     * @ORM'Column(name="cell", type="string", length=20, nullable=true)
     * @Assert'Length(min=10, max=20)
     * @Ser'Expose()
     */
    private $cell;
}
?>

我已经查看了用户实体提供程序中的Symfony2致命错误,但是如果我必须手动实现它们,我不知道这些方法必须进入什么。另外,doctine:generate:entities不应该为你做这件事吗?如果将类声明为抽象更容易,我该怎么做?这意味着什么?

当我们讨论这个主题时,我如何将保存用户角色保存/检索到数据库,例如(来自security.yml)

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

这实际上是第二个问题,如果在这里无法回答,那么我将打开一个新主题。感谢所有阅读过这个问题的人。

有关 http://symfony.com/doc/current/cookbook/security/entity_provider.html 上的实体提供程序的说明书文章介绍了如何正确设置它。