86 lines
3.0 KiB
PHP
86 lines
3.0 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Admin;
|
|
|
|
use App\Services\UserService; // <-- Importe seu Service
|
|
use Livewire\Component;
|
|
|
|
class CreateUser extends Component
|
|
{
|
|
// 1. Propriedades públicas (os campos do formulário)
|
|
// Elas substituem o 'Request $request'
|
|
public string $name = '';
|
|
public string $email = '';
|
|
public string $password = '';
|
|
public string $password_confirm = ''; // <-- Você também precisa deste
|
|
public bool $permission_level = false;
|
|
|
|
// 2. As regras de validação (copiadas do seu controller)
|
|
// Nota: Adicionei 'same:password' para garantir que as senhas batem.
|
|
protected $rules = [
|
|
'name' => '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');
|
|
}
|
|
}
|