提问者:小点点

无法使用条件验证规则-Laravel


我直接绑定到模型属性。我无法提交表单,因为在一个livewire组件中有两个表单。第一种形式是编辑用户,由nameemail角色组成,第二种形式是邀请用户,由email组成。

我不能提交表格,因为我已经根据受保护财产的规则综合说明了这两种表格的规则。因此,当我尝试编辑用户,使用第一种形式,它检查电子邮件字段,这是目前在邀请形式。我怎样才能让它在这个结构中工作。

  • App\Http\Livewire\UserController。php
public $showUserManagementModal = false;
public $showUserInvitationModal = false;

public User $user;
public Invitation $invitation;

protected function rules() {
    if ($showUserManagementModal = true)
        return [
            'user.name' => 'required | string | max:255',
            'user.email' => 'required | string | email | max:255',
            'role' => 'required',
        ];

    if ($showUserInvitationModal = true)
        return [
            'invitation.email' => 'required | string | email | max:255 | unique:invitations,email',
        ];
}

public function createInvitation() {
    $this -> useCachedRows();

    $this -> resetValidation();
    $this -> invitation = new Invitation();
    $this -> showUserInvitationModal = true;
}

public function saveInvitation() {
    $this -> validate();
    $this -> invitation -> generateInvitationToken();
    $this -> invitation -> save();
    $this -> showUserInvitationModal = false;
}

public function manageUser(User $user) {
    $this -> useCachedRows();

    $this -> resetValidation();
    $this -> user = $user;
    $this -> role = $user -> roles -> pluck('id');
    $this -> showUserManagementModal = true;
}

public function saveUser() {
    $this -> validate();
    $this -> validate([
        'user.email' => 'unique:users,email,'.$this -> user -> id,
    ]);
    $this -> user -> roles() -> sync($this -> role);
    $this -> user -> save();
    $this -> showUserManagementModal = false;

    $this -> dispatchBrowserEvent('notify', $this -> user -> name.' Updated Successfully');
}

共1个答案

匿名用户

rules()方法有两个问题-一个是检查局部变量(它不检查类的属性),另一个是给变量赋值而不是比较(单=而不是双=)。

protected function rules() {
    if ($this->showUserManagementModal === true)
        return [
            'user.name' => 'required|string|max:255',
            'user.email' => 'required|string|email|max:255',
            'role' => 'required',
        ];

    if ($this->showUserInvitationModal === true)
        return [
            'invitation.email' => 'required|string|email|max:255|unique:invitations,email',
        ];
}

您还应该将电子邮件的唯一检查移动到rules()方法,而不是在saveUser()方法中显式检查。

protected function rules() {
    if ($this->showUserManagementModal === true)
        return [
            'user.name' => 'required|string|max:255',
            'user.email' => 'required|string|email|max:255|unique:users,email'.($this->user->id ? ','.$this->user->id : ''),
            'role' => 'required',
        ];

    if ($this->showUserInvitationModal === true)
        return [
            'invitation.email' => 'required|string|email|max:255|unique:invitations,email',
        ];
}