在Laravel 5.4文档中,有一个example of a factory,其中包含一个静态变量$password
。这个变量的目的是什么?
$factory->define(App\User::class, function (Faker\Generator $faker) {
static $password;
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'password' => $password ?: $password = bcrypt('secret'),
'remember_token' => str_random(10),
];
});
答案 0 :(得分:1)
bcrypt()
是一项昂贵的电话,它是密码散列算法的一部分。
由于生成的假密码被硬编码为“secret”,因此每次都不需要bcrypt()
密码。通过使用static
变量,我们可以bcrypt()
密码一次,然后在每次后续工厂调用中(在同一请求中)使用相同的哈希值。
因此,例如,假设您正在设置需要100个用户的测试。
$users = factory(User::class, 100)->create();
该代码将调用工厂关闭100次。如果没有静态$password
变量,bcrypt()
将运行100次,这可能需要几秒钟。使用静态变量,bcrypt()
现在只运行一次,结果将用于所有100个用户,这大大提高了测试的速度。