Site

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

RegraDescriçãoExemplo
requiredCampo obrigatório'name' => 'required'
stringObrigatoriamente texto'name' => 'required|string'
emailValida formato de e-mail'email' => 'required|email'
numericAceita apenas números'price' => 'required|numeric'
booleanAceita verdadeiro ou falso'active' => 'required|boolean'
min:xTamanho mínimo'name' => 'min:3'
max:xTamanho 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 em create() e update().

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);