Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
laravel:在创建用户/更新密码时,根据密码字符串向模型传递额外数据?_Laravel - Fatal编程技术网

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
。我们需要进一步调查。尚不清楚最干净的方法是将my
Secret
添加为可选功能(类似于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'
    });
}