Validação de dados em Laravel: conveniente e poderoso

Publicados: 2023-05-03

Agora, mais do que nunca, é crucial que os dados em seus aplicativos sejam válidos, precisos e atendam a todos os requisitos do sistema. Ele aborda a necessidade de manter a consistência dos dados e evitar vulnerabilidades de segurança.

O Laravel torna a validação de dados fácil e intuitiva. Ele segue uma arquitetura de controlador de exibição de modelo (MVC) e requer apenas conhecimento geral de PHP e conceitos de programação orientada a objetos (OOP). Além disso, o Laravel oferece vários métodos para validar os dados recebidos.

Explore algumas dessas abordagens e como aplicar regras de validação ao seu conjunto de dados.

Validação de dados facilitada em Laravel

O Laravel fornece várias regras de validação prontas para uso quando os usuários do seu aplicativo enviam dados por meio de formulários. Você pode marcar os campos de entrada conforme necessário, definir um comprimento mínimo ou máximo e exigir entradas exclusivas (não duplicadas) e endereços de e-mail válidos. O validador Laravel verifica se a entrada satisfaz essas regras ou quaisquer outras que você especificar.

Essas regras de validação do Laravel incluem:

  • required — Os dados do campo não devem ser nulos ou vazios.
  • array — Os dados do campo devem ser um array PHP.
  • bail — A regra de validação para de ser executada após encontrar sua primeira falha de validação.
  • email — Os dados do campo devem ser um endereço de e-mail válido.
  • unique — Os dados do campo não devem ter duplicatas na tabela do banco de dados.

Todos os métodos de validação têm prós e contras, mas sua variedade permite que você escolha a melhor abordagem para suas necessidades. Dependendo do método escolhido, a validação do Laravel pode ocorrer de várias maneiras, com mensagens de erro manuais ou automáticas.

O método mais comum é code>validate, usado para solicitações HTTP recebidas. Este método é encadeado aos dados da requisição, executando as regras de validação. Você pode separar as regras de cada campo com vírgulas, conforme exemplo abaixo.

 use Illuminate\Http\Request; public function store (Request $request){ $validated = $request->validate([ 'email' => ['required, unique:users, email, bail'], 'name' => ['required'], ]); }

Aqui, email é uma entrada obrigatória, o que significa que não pode ser nulo. Além disso, deve ser único na tabela de banco de dados users , garantindo que o mesmo endereço de e-mail não seja registrado duas vezes. A última regra determina que o endereço de e-mail também deve ser válido. Caso contrário, o processo de validação cessa. O campo nome é obrigatório, mas não tem outras regras.

Se alguma regra de validação do Laravel falhar, uma resposta é gerada automaticamente.

Não deixe que um erro de dados estrague todo o seu trabalho duro! Valide seus dados e mantenha seu projeto são e salvo ️ Click to Tweet

Noções básicas de validação

Para entender melhor os métodos de validação, considere o exemplo a seguir. Você definirá uma rota para o endpoint e criará um controlador para validar e processar os dados da solicitação.

Primeiro, crie um endpoint simples que permita aos usuários armazenar seus e-mails e senhas.

Definir a rota

As rotas do Laravel são definidas no arquivo routes/web.php para uma aplicação web ou em routes/api.php para uma API. Para este exemplo, use api.php :

 use App\Http\Controllers\UserController; Route::post('/store', [UserController::class]);

Criar o Controlador

Execute este comando Artisan para criar o controlador:

 php artisan make:controller UserController

Este comando cria um arquivo UserController.php no diretório app/Http/Controllers .

Agora, defina um método store para validar os dados inseridos no terminal de armazenamento antes de armazená-los.

Este exemplo validará os seguintes campos usando estas regras:

  • e-mail — Deve ser único, um e-mail válido e obrigatório
  • password — Deve ter um comprimento mínimo, confirmação de senha e deve ser obrigatório
  • age — Deve ser um número e obrigatório
 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { /** * Store new user details. * */ public function store(Request $request){ $validated = $request->validate([ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]); // After user data is validated, logic to store the data } }

A regra confirmed permite que você exija um determinado campo duas vezes para verificar se os dados são precisos, como usuários reinserindo suas senhas durante o registro. Esta regra requer um campo chamado password_confirmation , cujos dados devem corresponder ao campo de senha .

Exibir mensagens de erro

Se os critérios de validação forem atendidos, seu código continuará rodando normalmente. Se a validação falhar, uma exceção IlluminateValidationValidationException será lançada e a resposta de erro apropriada será retornada.

O exemplo é baseado em uma API, que retorna uma resposta HTTP 422 Unprocessable Entity no formato JSON. Para aplicativos da web, ele redirecionaria para a URL anterior para exibir a mensagem de erro e os dados da solicitação piscariam para a sessão.

Você pode usar a variável $errors em suas visualizações para exibir os erros retornados:

 @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif

Você também pode optar por visualizar apenas o primeiro erro ou fazer um loop para visualizar todos eles.

 // Fetch all errors $errors->all() // Fetch only the first error $errors->first()

Repovoar formulários

Preencher novamente os formulários evita que os usuários digitem novamente as informações para que possam se concentrar em corrigir o erro. No exemplo de falha de um endereço de e-mail, você pode preencher novamente o restante do formulário chamando o valor antigo para o campo name .

 $name = $request-> old('name') //Blade helper <input type="text" name="name" value="{{ old('name') }}">

Esta regra retornaria null se não houvesse nenhuma entrada anterior.

Validação Avançada

O Laravel fornece outro método de escrita de validações chamado requisições de formulário. Uma solicitação de formulário é uma classe de solicitação personalizada que organiza validações e organiza seu controlador.

Eles têm sua própria lógica de validação e autorização adequada para grandes volumes de entrada e podem ser usados ​​para definir regras de validação e personalizar mensagens de erro.

Para criar uma solicitação de formulário, execute este comando Artisan:

 php artisan make:request StoreUserRequest

Este comando cria um arquivo StoreUserRequest.php no diretório app/Http/Requests e contém dois métodos padrão:

  • rules retorna regras de validação para dados de solicitação.
  • authorize retorna um booleano para indicar se esse usuário tem permissão para executar a ação solicitada.

Converta o exemplo anterior para usar uma solicitação de formulário.

 <?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class StoreUserRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { // Add logic to check if the user is authorized to submit this data. return true; } /** * Get the validation rules that apply to the request. * * @return array<string, mixed> */ public function rules() { return [ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]; } }

Para personalizar as mensagens de erro dessas regras, você pode substituir o método de mensagens na classe FormRequest .

 /** * Get the error messages for the defined validation rules. * * @return array */ public function messages() { return [ 'email.required' => 'An email address is required', 'email.email' => 'The email address must be valid', 'password.confirmed'=>'Re-type your password as password_confirmation, passwords does not match' ]; }

Nota: O nome dos dados e a regra de validação são separados por um ponto (.) antes dos dados da mensagem.

Validação personalizada

Para criar validação personalizada, você pode usar uma fachada Validator em vez de validate . A instância do validador contém dois argumentos: os dados a serem validados e um array de regras de validação. Esses dois argumentos são passados ​​para o método ::make na fachada do validador, gerando uma nova instância do validador.

 use Illuminate\Http\Request; public function store (Request $request){ $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]); if ($validator->fails()) { // Return errors or redirect back with errors return $validator->errors(); } // Retrieve the validated input... $validated = $validator->validated(); // Continue logic to store the data }

Se você deseja adicionar um direto automático, pode executar o método validate em uma instância de validador preexistente. Se a validação falhar, uma solicitação XHR produzirá uma resposta JSON com 422 Unprocessable Entity como código de status ou o usuário será redirecionado imediatamente.

 $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'password' => 'required|min:7|confirmed' ])->validate();

Você também pode personalizar suas mensagens de erro passando um terceiro argumento chamado messages para Validate::make method :

 $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ], $messages = [ 'required' => 'The :attribute field is required.', ]);

Nota: O :attribute é substituído pelo nome do campo em validação.

Trabalhar com grandes quantidades de dados pode rapidamente sair do controle. Proteja seu projeto (e sua sanidade!) com a validação do Laravel. Veja como Clique para Tweetar

Resumo

A execução da validação de dados é crucial para manter seu conjunto de dados limpo, correto e completo. A validação de dados permite que você elimine erros em seus dados que possam potencialmente corromper ou afetar seu projeto. A validação torna-se cada vez mais importante ao trabalhar em escala e com grandes quantidades de dados.

O Laravel permite várias abordagens flexíveis para garantir a integridade e a precisão dos dados que passam pelo seu aplicativo. Você pode obter uma lógica de validação complicada com métodos padrão e personalizáveis, tornando sua base de código bem estruturada e mais facilmente reutilizável.

Envie seus aplicativos Laravel mais rapidamente com os serviços de hospedagem de aplicativos da Kinsta.