【发布时间】:2021-04-02 09:59:31
【问题描述】:
我直接绑定到模型属性。我无法提交表单,因为单个 livewire 组件中有两个表单。第一种是编辑用户,由name、email、role组成,第二种是邀请用户,由email组成。
我无法提交表格,因为我在受保护的财产规则下结合了这两种表格的规则。因此,当我尝试使用第一个表单编辑用户时,它也会检查邀请表单中存在的 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');
}
【问题讨论】:
-
您需要在编辑表单上添加一些额外的字段。因此,当您提交该表单时 - 检查这些字段是否存在,然后不要检查验证或您不想在保存功能上执行的任何内容。
-
@Tuhin 我该怎么做,你能帮我解决这个问题吗?
-
在尝试使用 Laravel 构建应用程序之前,您可能想退后一步,先学习 PHP 的基础知识。只需查看
rules()方法的第一行,就可以将true的值分配给变量$showUserManagementModal。如果你想进行比较,那是一个不同的运算符,它会失败,因为你没有在任何地方定义变量。您也没有在任何地方使用该方法。 -
感谢@miken32 对它的启发,我已经默认将其声明为false。如果我正在编辑用户并在创建邀请时排除其他三个字段,如何进一步进行验证以排除该字段。
-
当管理员尝试管理用户时,我将
$showUserManagementModal的状态从 false 更改为 true。
标签: php laravel laravel-8 laravel-livewire