无法在 Symfony2 中登录扩展 FOS

Can't log in extending FOS in Symfony2

我有 3 个 classes(审计员、客户和经理)扩展 FOS\UserBundle\Model\User 和几个输入表单来创建每个类型。

例如Auditorclass(其他同理):

/**
 * @ORM\Entity
 * @ORM\Table(name="auditor")
 */
class Auditor extends BaseUser implements NotificationInterface
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    protected $id;

当我创建一个新的审核员时它工作正常,它在审核员 table 上创建并且一切正常。但是当我尝试登录时,它不起作用。另外,如果我通过 php app/console app:list-users 命令看到 FOS 用户,则不会出现新的 Auditor 用户。

我做错了什么?

尽管您已经从 BaseUser class 扩展了 classes,但您不能在 FOSUserBundle 中使用多个 classes 进行登录。检查您的 app/config/config.yml 文件。

fos_user:
    db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel'
    firewall_name: main
    user_class: AppBundle\Entity\User

这里你只定义了一个class作为fos_user。

根据您的要求使用 PUGXMultiUserBundle

The PUGXMultiUserBundle extends FOSUserBundle adding the feature to handle users of different types.

因为我不想使用另一个外部包,所以我尝试用另一种方式解决,我想出了这个最终有效的解决方案。

我以这种方式扩展了 FOS 用户实体:

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

    /**
     * @ORM\Table(name="fos_user")
     * @ORM\InheritanceType("JOINED")
     * @ORM\DiscriminatorColumn(name="discr", type="string")
     * @ORM\DiscriminatorMap({"user" = "User","subscriber" = "Subscriber", "client" = "Client", "company" = "Company"})
     * @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
     *
     */
    class User extends BaseUser
    {
        /**
         * @ORM\Id
         * @ORM\Column(type="integer")
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        protected $id;

然后在每个子类(订阅者、客户和公司)中我也扩展了这个子类(3 级层次结构计算 FOS 用户)。我贴在其中一个下面(其他的也一样):

use AppBundle\Entity\User as MyUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="AppBundle\Repository\ClientRepository")
 * @ORM\Table(name="client")
 */
class Client extends MyUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

希望这对任何人都有帮助...