Laravel 验证 'sometimes' 与 'present' 规则未覆盖验证中的值规则

Laravel validation 'sometimes' with 'present' rule isn't overriding the values rules in the validation

我正在尝试制作一种可用于更新用户配置文件的方法,以便用户更轻松我希望验证仅在字段中有数据时才有效,但是在尝试使用时'sometimes' 属性 和 'present' 属性,例如字符串 运行 的验证。在这个项目中我使用 vue.js 并使用 inertia.put 方法提交表单数据,我还使用 vue 开发工具 chrome 扩展来查看 inertia prop.

表单对象如下所示

form: {
             name: '',
             username: '',
             email: '',
             password: '',
             password_confirmation: '',
             _token : this.$page.props.csrf
         }

下面是 运行 放置请求

的方法
Inertia.put(route('user.edit', this.user.id), this.form, {
            onSuccess: () => {
                this.user.username = this.form.username;
                this.form.username = '';
                this.sweetAlertSuccess('username');
            }
        });

这是自定义请求Laravel中的验证方法

public function rules(): array
{
    return [
        'name' => ['sometimes', 'present', 'string', 'max:255'],
        'username' => ['sometimes', 'present', 'max:255', 'string', 'unique:users,username'],
        'email' => ['sometimes', 'present', 'email', 'unique:users,email', 'max:255'],
        'password' => ['sometimes', 'present', 'min:8', 'max:255', 'confirmed']
    ];
}

这是我看到的错误消息,我只希望消息验证其中包含数据但不符合规则的字段,如果该字段为空,那么我希望它跳过对该特定字段的验证在键控数组中。

用 nullable 替换 'present' 解决了这个问题。

public function rules(): array
{
    return [
        'name' => ['sometimes', 'nullable', 'string', 'max:255'],
        'username' => ['sometimes','nullable', 'max:255', 'string', 'unique:users,username'],
        'email' => ['sometimes', 'nullable', 'email', 'unique:users,email', 'max:255'],
        'password' => ['sometimes', 'nullable','min:8', 'max:255', 'confirmed']
    ];
}