将卡添加到 Laravel Jetstream / Livewire 配置文件表单

Adding card to Laravel Jetstream / Livewire profile form

我正在尝试将新的个人资料部分添加到默认的 laravel jetstream 个人资料视图。我创建了一个名为 SetContactPreferences 的新 livewire 组件,并通过添加以下内容从 resources/views/profile/show.blade.php 调用它:

@livewire('profile.set-contact-preferences') 

我创建的表单在配置文件中按预期显示为新卡片。

但是,我不清楚提交操作应该是什么样子。 The docs say 表单将提交当前经过身份验证的用户以及表单输入,因此我在我的组件中创建了一个方法,如:

public function setContactPreferences($user, $input) {
    dd($input);
}

我在 set-contact-preferences.blade.php 文件的顶部添加了 <x-jet-form-section submit="setShowingPreferences">

提交表单会抛出以下错误:

Illuminate\Contracts\Container\BindingResolutionException
Unable to resolve dependency [Parameter #0 [ <required> $user ]] in class App\Http\Livewire\Profile\SetContactPreferences 

它在 Jetstream 中的工作方式是,当提交 user profile information form 时,该提交由位于 Laravel\Fortify\Http\Controllers\ProfileInformationControllerProfileInformationController 上的 update 方法处理。

update方法需要两个参数,一个Request对象和一个UpdatesUserProfileInformation(它是App\Actions\Fortify\UpdateUserProfileInformation的实例),这两个参数都是从服务容器。

Jetstream 使用 $request->user()Request 对象获取当前用户,然后使用 $request->input().[=29 将其与任何表单输入一起传递给 UpdatesUserProfileInformation =]

如果您不关心其他人更新用户个人资料信息(例如系统管理员),您可以在方法签名中输入提示 Request 对象,它将自动注入:

public function setContactPreferences(Request $request)
{
    // Dump the currently authenticated user
    dd($request->user());
}

或者,您可以为您的组件提供一个 User,用于您可能想要更新当前未通过身份验证的用户的信息的情况。

public User $user;

public function setContactPreferences()
{
    dd($this->user);
}

然后传递一个User给组件:

@livewire('profile.set-contact-preferences', ['user' => Auth::user()])

@livewire('profile.set-contact-preferences', ['user' => User::find(1)])