按格式在实体中的Symfony唯一字段

时间:2017-11-21 16:08:36

标签: php symfony

对于我的逻辑,我需要通过某种格式生成uniq邀请代码 - 三位数和两位字母。在我使用Config.Volumes之前,但对于用户而言,这是非常复杂的邀请代码,请记住。以某种格式自动生成邀请代码的正确方法,例如 - Ramsey uuid

我的实体用户有uniq字段A123B。当我创建新实体时,我希望按格式生成自动uniq随机代码 - inviteCode

three digits and two letters

我找到了类似的东西

/**
 * @ORM\Table(name="users")
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 * @AssertBridge\UniqueEntity(
 *     groups={"registration"},
 *     fields="inviteCode",
  *     errorPath="not valid",
 *     message="This inviteCode is already in use."
 * )
 */
 class User extends AbstractUser implements UserInterface
 {
/**
 * @ORM\Column(type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\Column(type="string", length=500, unique=true)
 * @Annotation\SerializedName("_invite_code")
 */
private $inviteCode;

首先从表中获取最大ID,然后使用id调用函数 private function calculateReference($number) { $multipliers = array(7,3,1); $length = strlen($number); $numberArr = str_split($number); $sum = 0; for ($i = $length - 1; $i >= 0; --$i) { $sum += $numberArr[$i] * $multipliers[($length - 1 - $i) % 3]; } return $number.(10 - $sum % 10) % 10; } ,但我需要调整长度,例如只有6个符号

现在有什么好方法可以按格式calculateReference生成一些哈希值?

1 个答案:

答案 0 :(得分:0)

在我的项目中,我只是在控制器中执行此操作,如下所示:

$genActivationHash = bin2hex(random_bytes(64));
$activationLink = $this->container->getParameter('base_url') . 
"/activate/" . $genActivationHash;

您可以通过简单地更改字节数

来编辑哈希的长度
  

random_bytes(n)的

编辑;我现在看到,它不能满足你对两个字母和三个数字的要求。