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

2022-08-31 00:36:48

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

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


答案 1

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

请参阅底部的评论

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

因此,静态$password不是为了包含来自外部的一些密码。这只是获得性能的聪明技巧。


答案 2

推荐