【问题标题】:How does the static password work in the default Laravel user factory?静态密码在默认的 Laravel 用户工厂中是如何工作的?
【发布时间】:2026-01-24 21:20:02
【问题描述】:

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

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

【问题讨论】:

    标签: php laravel static


    【解决方案1】:

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

    See the comment at the bottom

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

    所以静态 $password 不用于包含一些来自外部的密码。这只是一个提高性能的聪明技巧。

    【讨论】: