Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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 FOSUserBundle生成字母数字用户名_Symfony_Fosuserbundle_Alphanumeric - Fatal编程技术网

symfony2 FOSUserBundle生成字母数字用户名

symfony2 FOSUserBundle生成字母数字用户名,symfony,fosuserbundle,alphanumeric,Symfony,Fosuserbundle,Alphanumeric,在我的Symfony项目中,我有不同类型的用户: 2个ID为1和2的管理员帐户,用户名可以是任何内容 ID为3-102且用户名必须为AA001至AA100的公司100帐户 以及用户名为AA101、AA102等的普通用户的帐户 我将创建一个symfony命令来生成这两个管理员帐户和公司帐户 我的问题是如何为使用注册表的其他人生成用户名,以便第一个注册用户名的人是AA101,依此类推 我的第一个想法是: 恢复id max(maxid)并使用($username='AA'.maxid-1) 但是如果两

在我的Symfony项目中,我有不同类型的用户: 2个ID为1和2的管理员帐户,用户名可以是任何内容 ID为3-102且用户名必须为AA001至AA100的公司100帐户 以及用户名为AA101、AA102等的普通用户的帐户

我将创建一个symfony命令来生成这两个管理员帐户和公司帐户

我的问题是如何为使用注册表的其他人生成用户名,以便第一个注册用户名的人是AA101,依此类推

我的第一个想法是: 恢复id max(maxid)并使用($username='AA'.maxid-1) 但是如果两个用户同时注册会发生什么呢

第二个想法: 持久化实体并获取其ID(在持久化事件之后)并使用($username='AA'.ID-2) 此方法避免了两个帐户具有相同用户名的风险 但是在持久化之前应该在用户名中输入什么呢

我不知道从哪里开始,哪种方法是最好的。 所以任何建议或想法都会非常有用

PS:对不起,我的英语

我现在的解决方案

用户类

<?php
namespace FM\FmBundle\Entity;

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

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class Users extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }

    public function setEmail($email){
        parent::setEmail($email);
        parent::setUsername($email);
    }
}
app/config/security.yml

providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email
但是没有任何事情发生用户名仍然与用户电子邮件相同, 当我替换

if($user instanceof Users) {
            $number=$user->getId()-2;
            $user->setUsername('AA'.$number);
        }

它很好用

我在if之前试过这个

dump(get_class($user));
dump($user instanceof Users); die;
它给

UserPostPersistListener.php on line 17:
"FM\FmBundle\Entity\Users"
UserPostPersistListener.php on line 18:
false
我的问题是为什么$user的类名是Users,而不是Users的实例?
如果没有if语句,代码将针对每个实体执行

实际上第二个想法看起来比第一个好,在默认情况下,您可以将username设置为某个默认值,然后它将被更改php函数is_a($user,'Users')give false is_a($user,'FM\FmBundle\entity\Users')give true,因此我可以使用if语句
$number=$user->getId()-2;
$user->setUsername('AA'.$number);
dump(get_class($user));
dump($user instanceof Users); die;
UserPostPersistListener.php on line 17:
"FM\FmBundle\Entity\Users"
UserPostPersistListener.php on line 18:
false