laravel:在创建用户/更新密码时,根据密码字符串向模型传递额外数据?
创建新模型时,我可以调用laravel:在创建用户/更新密码时,根据密码字符串向模型传递额外数据?,laravel,Laravel,创建新模型时,我可以调用creating()。 我能把额外的数据传给那个吗 示例:创建/更新用户模型时,我希望自动创建/更新受密码保护(加密)的字段,我需要该字段的密码值。因此,我想传递/访问该密码字符串 另一种方法是手动执行并提前准备结果,然后将all传递给create(),例如: 但我希望作为模型的“一部分”实现这一点 更新2:现在探索Jetstream/Fortify路线。感觉那里是最干净的地方,因为那里有$input['password']可用,User::create()。查看app\
creating()
。我能把额外的数据传给那个吗 示例:创建/更新用户模型时,我希望自动创建/更新受密码保护(加密)的字段,我需要该字段的密码值。因此,我想传递/访问该密码字符串 另一种方法是手动执行并提前准备结果,然后将all传递给create(),例如: 但我希望作为模型的“一部分”实现这一点 更新2:现在探索Jetstream/Fortify路线。感觉那里是最干净的地方,因为那里有
$input['password']
可用,User::create()
。查看app\Actions\Fortify\CreateNewUser.php
,UpdateUserPassword.php
和ResetUserPassword.php
。我们需要进一步调查。尚不清楚最干净的方法是将mySecret
添加为可选功能(类似于2 factor是可选功能)
更新1:我可以为工厂做类似的事情吗
class UserFactory extends Factory
{
public function definition()
{
...
}
/**
* Add secret field based on user's password.
*
* @return \Illuminate\Database\Eloquent\Factories\Factory
*/
public function addSecret(string $passwordString = 'password')
{
$secret = createSecretField($passwordString);
return $this->state( fn(array $attributes) => [
'secret_field'=>$secret,
]);
}
}
因此,我可以使用:
$fields = [
'password' => 'mypassword',
...
];
User::factory()->addSecret($fields['password'])->create($fields);
我正在考虑使用常规模型方法/属性变体,但不确定这是正确的方法。如果我理解这个问题,那么是的,正如您在参考文档中看到的那样
protected static function booted()
{
static::created(function ($user) {
$user->password = 'do whatever'
});
}
在本例中,您可以通过$user进行访问,然后您可以在回调中执行任何您想执行的操作。谢谢。不希望
created()
(在我的例子中:creating()
)定义密码,而是希望能够访问它$模型中的user->password由散列密码填充,因此:如何访问/传递字符串密码?您的目标是将密码设置为您想要的密码,还是让用户登录,然后立即以明文形式接收他们的密码?尝试将常规应用程序创建/更新用户模型与“创建/更新使用相同密码的受密码保护的字段”
protected static function booted()
{
static::created(function ($user) {
$user->password = 'do whatever'
});
}