Livewire Form
<?php
namespace App\Livewire\Forms;
use Livewire\Form;
use App\Models\User;
use Illuminate\Validation\Rule;
class UserForm extends Form
{
public $user = '';
public $name = '';
public $email = '';
public $password = '';
public $role = '';
public $status = '';
public function rules()
{
$rules = [
'name' => 'required',
'email' => [
'required',
'email',
Rule::unique('users', 'email')->ignore($this->user, 'uuid'),
],
'password' => [
'string',
'min:8', // must be at least 8 characters in length
'regex:/[a-z]/', // must contain at least one lowercase letter
'regex:/[A-Z]/', // must contain at least one uppercase letter
'regex:/[0-9]/', // must contain at least one digit
'regex:/[@$!%*#?&]/', // must contain a special character
],
'role' => 'required',
'status' => 'required',
];
if (empty($this->user)) {
array_unshift($rules['password'], 'required');
} else {
array_unshift($rules['password'], 'nullable');
}
return $rules;
}
public function stored()
{
User::create([
'name' => $this->name,
'email' => $this->email,
'password' => bcrypt($this->password),
'role' => $this->role,
'status' => $this->status,
]);
}
}
Livewire Component
<?php
namespace App\Livewire\Panel\User;
use Livewire\Component;
use App\Livewire\Forms\UserForm;
class ModalStored extends Component
{
public UserForm $form;
public function render()
{
return view('livewire.panel.user.modal-stored');
}
public function submit()
{
$this->createOrUpdate();
}
public function createOrUpdate()
{
$this->validate();
try {
$this->form->stored();
$this->dispatch('close-modal', ref: "modal-stored");
$this->dispatch('notify', msg: "Executado com sucesso!", type: "success");
} catch (\Exception $e) {
$this->dispatch('notify', msg: "Não foi possível salvar.", type: "error");
}
}
}