logo

个人资料管理

简介

用户可以通过 Laravel Jetstream 右上角的用户资料导航下拉菜单访问其个人资料管理功能。Jetstream 会搭建视图和操作,允许用户更新其姓名、电子邮件地址,以及可选的个人资料照片。

Screenshot of Profile Management

操作

与大多数 Jetstream 功能一样,用于满足个人资料更新请求的逻辑可以在应用程序中的操作类中找到。具体来说,当用户更新其个人资料时,将调用 App\Actions\Fortify\UpdateUserProfileInformation 类。此操作负责验证输入并更新用户的个人资料信息。

因此,您希望对应用程序对该信息的管理进行的任何自定义都应在此类中进行。调用时,操作会接收当前经过身份验证的 $user 和一个包含来自传入请求的所有输入的 $input 数组,包括更新的个人资料照片(如果适用)。

管理其他信息

如果您需要管理有关用户的其他信息,您并不局限于仅修改提供的“个人资料信息”卡片。您可以在用户的个人资料仪表板中添加任意数量的其他 UI 元素和表单。

视图/页面

使用 Livewire 堆栈时,用户的个人资料信息表单使用 resources/views/profile/update-profile-information-form.blade.php Blade 模板显示。使用 Inertia 堆栈时,此视图使用 resources/js/Pages/Profile/UpdateProfileInformationForm.vue 模板显示。

这些模板中的每一个都将接收完整的经过身份验证的用户对象,以便您根据需要向这些表单添加其他字段。添加到表单中的任何其他输入都将包含在传递给 UpdateUserProfileInformation 操作的 $input 数组中。

个人资料照片

启用个人资料照片

如果您希望允许用户上传自定义个人资料照片,您必须在应用程序的 config/jetstream.php 配置文件中启用该功能。要启用该功能,只需从该文件中的 features 配置项中取消注释相应的特征条目即可

php
use Laravel\Jetstream\Features;

'features' => [
    Features::profilePhotos(),
    Features::api(),
    Features::teams(),
],

启用个人资料照片功能后,您应该执行 storage:link Artisan 命令。此命令将在应用程序的 public 目录中创建一个符号链接,允许应用程序提供用户的图像。有关此命令的信息,请参阅 Laravel 文件系统文档

bash
php artisan storage:link

管理个人资料照片

Jetstream 的个人资料照片功能由 `Laravel\Jetstream\HasProfilePhoto` 特性支持,该特性在 Jetstream 安装期间自动附加到您的 `App\Models\User` 类。

此特性包含诸如 `updateProfilePhoto`、`getProfilePhotoUrlAttribute`、`defaultProfilePhotoUrl` 和 `profilePhotoDisk` 等方法,如果您需要自定义其行为,则可以由您自己的 `App\Models\User` 类覆盖所有这些方法。建议您通读此特性的源代码,以便全面了解它为您的应用程序提供的功能。

`updateProfilePhoto` 方法是用于存储个人资料照片的主要方法,由您的应用程序的 `App\Actions\Fortify\UpdateUserProfileInformation` 操作类调用。

Laravel Vapor

默认情况下,当您的 Jetstream 应用程序在 Laravel Vapor 中运行时,将使用 `s3` 磁盘来存储个人资料照片。

帐户删除

个人资料管理屏幕还包含一个操作面板,允许用户删除其应用程序帐户。当用户选择删除其帐户时,将调用 `App\Actions\Jetstream\DeleteUser` 操作类。您可以在此类中自由自定义应用程序的帐户删除逻辑。

可以通过从应用程序的 `config/jetstream.php` 配置文件中删除该功能来禁用帐户删除功能。

php
use Laravel\Jetstream\Features;

'features' => [
    Features::termsAndPrivacyPolicy(),
    Features::profilePhotos(),
    Features::api(),
    Features::teams(),
    // Features::accountDeletion(),
],