LARAVEL::FormRequest – Regra de Validação para ID exclusivo

Logo Laravel

Em algum momento você já precisou validar a exclusividade de um ID na tabela do banco de dados (Unique) antes de editar ou adicionar dados através de um formulário?

Suponha que você esteja criando um CRUD para cadastrar carros, com as operações Create, Edit, Update, Destroy, sendo uma declaração de rota para cada tipo de requisição. Então, pretende validar determinado Id de um carro, se já está em uso na tabela. Como fazer usando o FormRequest do Laravel?

É muito simples! Usando o exemplo acima, sendo uma requisição PUT (um update) para carros/{carro}, poderemos obter qualquer parâmetro que vier na requisição post. A chave estar em obter pelo objeto que recebemos quando invocamos route(). Certamente o parâmetro carro estará lá! Isto acontece porque o FormRequest se extende de um objeto Illuminate\Http\Request. Assim, você pode recuperar desta 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]
    ];
}

Agora se você estiver usando “route model binding”, ainda será tranquilo. Você vai utilizar inicialmente a mesma declaração do exemplo anterior. Mas visto que, agora você estará recebendo como resultado uma instância de request, terá uma etapa a mais que é invocar o método ->getKey() no resultado. Como você nota 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 se você definiu as rotas como RESOURCE, por exemplo Route::resource(carros, ‘CarroController’), os nomes são criados dinamicamente e passados para o plural. Neste caso terá de buscar pelo –>parameter(‘carros’). Claro que fica a recomendação a você de sempre examinar o objeto em ->route() para ver tudo está disponível vindo da request.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.