'required|string|max:255', 'email' => 'required|email', 'password' => 'required|string|min:8', 'password_confirm' => 'required|string|same:password', // <-- Regra importante! 'permission_level' => 'required|boolean' // ou 'required|in:0,1' ]; protected $messages = [ 'name' => 'Nome precisa ser informado.', 'email' => 'O email precisa ser informado.', 'password' => 'A senha precisa ter 8 ou mais caracteres.', 'password_confirm' => 'As senhas não coincidem.', 'permission_level' => 'Defina o nível de autorização do usuário.' ]; /** * O método de "salvar", que substitui o seu 'createUsers'. * * Note como injetamos o UserService direto no método! * O Livewire cuida disso para você, assim como o Laravel faz nos controllers. */ public function save(UserService $userService) { // 3. Valida as propriedades públicas ($this->name, $this->email, etc.) $validated = $this->validate($this->rules, $this->messages); // 4. Seu 'try...catch' - praticamente idêntico try { // 5. CHAMA O MESMO SERVICE! Nenhuma lógica de negócio é duplicada. $user = $userService->createUser($validated); // 6. O "Sucesso" (Tradução do Redirect) // Limpa o formulário $this->reset(); // Dispara um evento para o Alpine.js fechar o modal $this->dispatch('user-created'); // Envia a mesma mensagem de sucesso do seu controller session()->flash('message', 'Usuário cadastrado com sucesso!'); // (Opcional) Se sua tabela de usuários for outro componente Livewire, // você pode mandar ela atualizar assim: // $this->dispatch('refreshUserList'); } catch (\Exception $e) { // 7. O "Erro" (Tradução do Redirect de Erro) // Em vez de redirecionar, adicionamos o erro ao formulário // para que o usuário veja na tela, sem refresh. if ($e->getMessage() == 'O e-mail já está cadastrado.') { $this->addError('email', $e->getMessage()); } $this->addError('general', $e->getMessage()); } } public function render() { return view('livewire.admin.create-user'); } }