Validação
Antes de salvar no banco, você precisa garantir que o formulário veio certo. Use $req->check([...]): ele valida, sanitiza e devolve um array só com os campos das regras.
ℹ️Em poucas palavras
Web: se falhar, volta para a página com erros. API: responde JSON 422.
Exemplo Básico
// Onde: Controller
// check() valida, sanitiza e devolve só os campos das regras
$data = $req->check([
'name' => 'required|min:3|max:100|string'
]);Retorno
O método retorna um array contendo apenas os dados validados:
$name = $data['name'];
// Pode enriquecer o array depois
$data['extra'] = 'valor';Regras Disponíveis
| Regra | Descrição | Exemplo |
|---|---|---|
required | Campo obrigatório | 'name' => 'required' |
string | Obrigatoriamente texto | 'name' => 'required|string' |
email | Valida formato de e-mail | 'email' => 'required|email' |
numeric | Aceita apenas números | 'price' => 'required|numeric' |
boolean | Aceita verdadeiro ou falso | 'active' => 'required|boolean' |
min:x | Tamanho mínimo | 'name' => 'min:3' |
max:x | Tamanho máximo | 'title' => 'max:150' |
Regra: unique
Verifica se um valor é único no banco de dados:
'email' => 'unique:users,email'Ignorando o ID Atual (para atualizações)
'title' => 'unique:posts,title,10,id'ℹ️Significado
Verifica se o título é único ignorando o registro de ID 10.
Com Condição Extra
'title' => 'unique:mucrm_posts,title,15,id,category_id,3'ℹ️Significado
Título único ignorando o ID 15, somente dentro da categoria 3.
Regra: exists
Verifica se um valor existe no banco:
'category_id' => 'exists:categories,id'Com Condição Extra
Formato: exists:tabela,coluna,campo_condicao,valor
'category_id' => 'required|exists:mucrm_post_categories,id,active,true'ℹ️Significado
O ID informado precisa existir na tabela
mucrm_post_categories e possuir active = true.Exemplo: Criando um Registro
public function store(request $req)
{
$data = $req->check([
'category_id' => 'required|exists:mucrm_post_categories,id,active,true',
'title' => 'required|max:150|unique:mucrm_posts,title',
'description' => 'required|max:150',
'content' => 'required|max:10000',
'active' => 'required|boolean'
]);
post::create($data);
return res()->success('Post criado!')->to('posts.index');
}Exemplo: Atualizando um Registro
public function update(request $req, $post_id)
{
$post = post::find($postId);
$data = $req->check([
'category_id' => 'required|exists:mucrm_post_categories,id,active,true',
'title' => "required|max:150|unique:mucrm_posts,title,{$post->id},id,category_id,{$post->category_id}",
'description' => 'required|max:150',
'content' => 'required|max:10000',
'active' => 'required|boolean'
]);
$post->update($data);
return res()->success('Post atualizado!')->back();
}Mensagens Personalizadas
É possível definir mensagens específicas para cada regra:
$data = $req->check([
'name' => 'required|min:3'
], [
'name.required' => 'Informe seu nome.',
'name.min' => 'Nome muito curto.'
]);Obtendo Valores
$name = $data['name'];
$email = $data['email'];Exemplo Completo
$data = $req->check([
'name' => 'required|min:3|max:100',
'email' => 'required|email|unique:users,email',
'role' => 'exists:roles,id,active,true',
'active' => 'required|boolean'
]);Boas Práticas
💡Recomendações
- Sempre valide os dados antes de salvar.
- Utilize
exists()para chaves estrangeiras. - Utilize
unique()em campos que não podem ser duplicados. - Em atualizações, ignore o próprio ID do registro.
- Separe mensagens personalizadas quando necessário.
- Mantenha as regras organizadas e legíveis.
- Utilize o array retornado pelo
check()diretamente emcreate()eupdate().
Resumo Rápido
$data = $req->check([
'name' => 'required|min:3|max:100',
'email' => 'required|email|unique:users,email',
'role' => 'exists:roles,id,active,true',
'active' => 'required|boolean'
]);
user::create($data);