Validação de ID exclusivo no FormRequest do Laravel

Você já precisou realizar a validação de ID exclusivo no FormRequest em uma tabela do banco de dados antes de editar ou adicionar dados através de um formulário?

Agora, imagine que você esteja criando um CRUD para cadastrar carros, onde as operações incluem Create, Edit, Update e Destroy, e existe uma declaração de rota para cada tipo de requisição. Nesse cenário, você precisará validar se o ID de um carro já está em uso na tabela. Mas como fazer isso utilizando o FormRequest no Laravel?

A solução é bastante simples! Usando o exemplo acima, onde uma requisição PUT é feita para carros/{carro}, você pode obter qualquer parâmetro que vier na requisição POST. O segredo está em acessar o objeto que você recebe ao invocar route(). Certamente, o parâmetro carro estará presente! Isso acontece porque o FormRequest estende o objeto Illuminate\Http\Request. Portanto, você pode recuperar o parâmetro da seguinte maneira:

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    $carroId = $this->route()->parameter('carro');

    return [
        'slug' => ['required', 'unique:carros,slug,' . $carroId]
    ];
}

Se você utilizar o route model binding, o processo continua simples. Inicialmente, você utiliza a mesma declaração do exemplo anterior. No entanto, como recebe uma instância de um modelo como resultado, haverá uma etapa adicional: você precisa invocar o método ->getKey() nesse resultado. Veja como isso funciona no exemplo a seguir:

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    $carro = $this->route()->parameter('carro');

    return [
        'slug' => ['required', 'unique:carros,slug,' . $carro->getKey()]
    ];
}

Note que, ao definir as rotas como RESOURCE, por exemplo, Route::resource('carros', 'CarroController'), o sistema cria os nomes dinamicamente e os converte para o plural. Nesse caso, você precisa buscar pelo ->parameter('carros'). Além disso, recomendo que você sempre examine o objeto em ->route() para verificar tudo o que está disponível na requisição.

Conclusão

Realizar a validação de ID exclusivo no FormRequest do Laravel é essencial para garantir a integridade dos dados. Usando o método route() para acessar os parâmetros da rota, você consegue verificar facilmente se o ID já está em uso, seja em uma requisição comum ou utilizando o route model binding.

Ao seguir os exemplos de implementação, você aplica essas validações de forma eficiente em seu processo de CRUD. Além disso, o route model binding mantém o fluxo fluido com uma pequena adaptação — invocar o método getKey() no modelo. Portanto, ao definir suas rotas como RESOURCE, fique atento para buscar os parâmetros corretamente, garantindo que o processo de validação funcione robustamente. Com essas práticas, você otimiza o controle e a segurança dos dados em suas rotas no Laravel.

Saiba mais:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima