静态密码如何在默认的Laravel用户工厂中运行?

Kim*_*nce 12 php static laravel

根据此链接,https: //laravel.com/docs/5.4/database-testing#writing-factories,默认的Laravel用户工厂测试静态$password变量的值.如果它是假的,它会加密'秘密'并使用它.

如何设置静态变量的值$password?显然我不想在声明函数时导入它(因为那样会破坏使其变量的目的).我意识到我可以通过将数组传递给make()方法来覆盖密码的值,但这完全是另一回事.

小智 28

我有完全相同的问题,在这里找到答案:

请参阅底部的评论

bcrypt()是一种昂贵的调用,它是密码散列算法的一部分.由于生成的假密码被硬编码为"secret",因此无需每次都使用bcrypt()密码.通过使用静态变量,我们可以一次bcrypt()密码,然后在每次后续工厂调用(在同一请求中)使用相同的哈希值.因此,例如,假设您正在设置需要100个用户的测试. $users = factory(User::class, 100)->create(); 该代码将调用工厂关闭100次.如果没有静态$ password变量,bcrypt()将运行100次,这可能需要几秒钟.使用静态变量,bcrypt()现在只运行一次,结果用于所有100个用户,这大大提高了测试速度.

所以静态$ password不是为了从外面包含一些密码.获得性能只是一个聪明的技巧.

  • 哇,干得好.这是模糊不清的. (2认同)