{"id":2693,"date":"2024-11-26T10:40:55","date_gmt":"2024-11-26T13:40:55","guid":{"rendered":"https:\/\/thiagorossi.com.br\/blog\/?p=2693"},"modified":"2025-12-05T11:27:23","modified_gmt":"2025-12-05T14:27:23","slug":"laravel-validation","status":"publish","type":"post","link":"https:\/\/thiagorossi.com.br\/blog\/laravel-validation\/","title":{"rendered":"Laravel Validation"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de leitura: <\/span> <span class=\"rt-time\"> 4<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Laravel Validation<\/strong>: A <strong>Valida\u00e7\u00e3o de Dados<\/strong> \u00e9 uma etapa cr\u00edtica e obrigat\u00f3ria no ciclo de vida de uma requisi\u00e7\u00e3o HTTP. No <strong>Laravel 12<\/strong>, a valida\u00e7\u00e3o \u00e9 simples, fluente e extremamente robusta. Ela garante que os dados de entrada dos usu\u00e1rios (formul\u00e1rios, APIs) atendam aos requisitos definidos, protegendo a aplica\u00e7\u00e3o contra dados maliciosos ou inconsistentes.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Este artigo detalha o sistema de Valida\u00e7\u00e3o do Laravel, focando nas regras, <em>Form Requests<\/em> e personaliza\u00e7\u00e3o de mensagens.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">1. \ud83d\udee1\ufe0f Por Que Validar no Servidor?<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">A valida\u00e7\u00e3o <strong>n\u00e3o deve<\/strong> depender apenas do <em>front-end<\/em> (HTML5 ou JavaScript). A valida\u00e7\u00e3o no lado do servidor \u00e9 a \u00fanica garantia de <strong>Seguran\u00e7a<\/strong> e <strong>Integridade dos Dados<\/strong>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Seguran\u00e7a:<\/strong> Impede ataques como <strong>Inje\u00e7\u00e3o de SQL<\/strong> ou <strong>XSS<\/strong> (Cross-Site Scripting) ao garantir que os dados estejam no formato esperado.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Integridade:<\/strong> Assegura que os dados inseridos no banco de dados sejam consistentes (ex: e-mails v\u00e1lidos, campos obrigat\u00f3rios preenchidos, unicidade garantida).<\/li>\n<\/ul>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">2. \ud83d\udcdd Valida\u00e7\u00e3o R\u00e1pida no Controller<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">A forma mais direta de validar dados de uma requisi\u00e7\u00e3o \u00e9 utilizando o m\u00e9todo <strong><code>validate()<\/code><\/strong> dispon\u00edvel no objeto <code>Illuminate\\Http\\Request<\/code> injetado no seu <em>Controller<\/em>.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de Valida\u00e7\u00e3o Direta<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>use Illuminate\\Http\\Request;\n\npublic function store(Request $request)\n{\n    \/\/ Se a valida\u00e7\u00e3o falhar, o Laravel lan\u00e7a uma exce\u00e7\u00e3o,\n    \/\/ interrompe a execu\u00e7\u00e3o e redireciona automaticamente o usu\u00e1rio.\n    $validatedData = $request-&gt;validate(&#91;\n        'name' =&gt; 'required|min:3',\n        'email' =&gt; 'required|email|unique:users', \/\/ \u00danico na tabela 'users'\n        'password' =&gt; 'required|min:8|confirmed', \/\/ 'confirmed' exige o campo 'password_confirmation'\n    ]);\n    \n    \/\/ O c\u00f3digo s\u00f3 \u00e9 executado se a valida\u00e7\u00e3o for bem-sucedida.\n    \/\/ $validatedData cont\u00e9m apenas os campos validados (limpo).\n\n    \/\/ ... l\u00f3gica de neg\u00f3cio e redirecionamento ...\n    return redirect()-&gt;route('login');\n}\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">3. \ud83d\udcc4 Form Requests: Organiza\u00e7\u00e3o da L\u00f3gica<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para rotas mais complexas ou para manter seus <em>Controllers<\/em> limpos (<em>Single Responsibility Principle<\/em>), use classes dedicadas de <strong>Form Request<\/strong>. Elas encapsulam as regras de valida\u00e7\u00e3o e a l\u00f3gica de autoriza\u00e7\u00e3o.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">A. Criando e Definindo Regras<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Gere a classe:<\/strong><br>Bash<br><code>php artisan make:request StoreUserRequest<\/code><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Edite as regras e a autoriza\u00e7\u00e3o:<\/strong><\/li>\n<\/ol>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ app\/Http\/Requests\/StoreUserRequest.php\n\nuse Illuminate\\Foundation\\Http\\FormRequest; \n\nclass StoreUserRequest extends FormRequest { \n    public function authorize(): bool {                 \n        \/\/ Define a l\u00f3gica de permiss\u00e3o (ex: Se o usu\u00e1rio est\u00e1 logado) \n        \/\/ Altere para a l\u00f3gica desejada (ex: auth()->check()) \n        return true; \n    } \n\n    public function rules(): array { \n        return &#91; \n            'name' => 'required|min:3', \n            'email' => 'required|email|unique:users',\n            'password' => 'required|min:8' \n        ]; \n    } \n}<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">B. Inje\u00e7\u00e3o no Controller<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O Laravel \u00e9 inteligente: se voc\u00ea injetar o <code>Form Request<\/code> no m\u00e9todo do <em>Controller<\/em>, a valida\u00e7\u00e3o e a autoriza\u00e7\u00e3o ocorrer\u00e3o <strong>automaticamente<\/strong> antes que o m\u00e9todo seja chamado.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ No Controller\npublic function store(StoreUserRequest $request)\n{    \n    \/\/ Se chegou aqui, os dados s\u00e3o v\u00e1lidos.\n    \/\/ ...salva usu\u00e1rio no banco de dados...\n    return redirect()-&gt;route('login');\n}\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">4. \u270d\ufe0f Customiza\u00e7\u00e3o de Mensagens e Views<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">A. Mensagens de Erro Personalizadas (Inline)<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Voc\u00ea pode passar um array de mensagens personalizadas como segundo argumento para o m\u00e9todo <code>validate()<\/code>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$messages = &#91;\n    'name.required' =&gt; 'Por favor, preencha o campo :attribute.', \/\/ :attribute \u00e9 um placeholder\n    'email.unique' =&gt; 'Este e-mail j\u00e1 foi cadastrado no sistema.',\n];\n\n$request-&gt;validate(&#91; \/* regras *\/ ], $messages);\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">B. Exibindo Erros no Blade<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Em caso de falha, o Laravel retorna automaticamente o usu\u00e1rio com os erros na vari\u00e1vel global <code>$errors<\/code>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">HTML<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@if ($errors-&gt;any())\n    &lt;div class=\"alert alert-danger\"&gt;\n        &lt;strong&gt;Opa!&lt;\/strong&gt; Houve um erro nos dados:\n        &lt;ul&gt;\n            @foreach ($errors-&gt;all() as $error)\n                &lt;li&gt;{{ $error }}&lt;\/li&gt;\n            @endforeach\n        &lt;\/ul&gt;\n    &lt;\/div&gt;\n@endif\n\n@error('email')\n    &lt;div class=\"text-danger\"&gt;{{ $message }}&lt;\/div&gt;\n@enderror\n\n&lt;input type=\"email\" name=\"email\" value=\"{{ old('email') }}\"&gt;\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">5. \ud83c\udf1f Regras de Valida\u00e7\u00e3o Customizadas<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para l\u00f3gica de valida\u00e7\u00e3o que n\u00e3o existe nas regras padr\u00e3o (ex: CPF, CNPJ, ou datas espec\u00edficas), voc\u00ea pode criar suas pr\u00f3prias regras.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo: Regra Customizada via <code>Validator::extend<\/code><\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Voc\u00ea pode usar o m\u00e9todo <code>Validator::extend<\/code> para registrar uma nova regra customizada com o Laravel.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>use Illuminate\\Support\\Facades\\Validator;\n\n\/\/ Idealmente, isto deve ser feito em um Service Provider (ex: AppServiceProvider::boot)\nValidator::extend('cpf', function ($attribute, $value, $parameters, $validator) {\n    \/\/ Exemplo: Implementa\u00e7\u00e3o complexa de valida\u00e7\u00e3o de CPF (requer l\u00f3gica externa)\n    \/\/ Supondo que voc\u00ea tenha a l\u00f3gica em uma classe utilit\u00e1ria:\n    return \\App\\Utils\\CpfHelper::isValid($value);\n});\n\n\/\/ Mensagem de erro para a regra 'cpf'\nValidator::replacer('cpf', function ($message, $attribute, $rule, $parameters) {\n    return \"O campo :attribute cont\u00e9m um n\u00famero de CPF inv\u00e1lido.\";\n});\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Depois de registrado, use a regra no seu <em>Controller<\/em> ou <em>Form Request<\/em>:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$request-&gt;validate(&#91;'cpf' =&gt; 'required|cpf']);\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">\u2705 Conclus\u00e3o Laravel Validation<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Laravel Validation:<\/strong> O sistema de valida\u00e7\u00e3o do Laravel \u00e9 uma das suas ferramentas mais essenciais, garantindo a <strong>seguran\u00e7a<\/strong> e a <strong>integridade<\/strong> dos dados. A prefer\u00eancia \u00e9 usar <strong>Form Requests<\/strong> para encapsular regras e autoriza\u00e7\u00e3o, mantendo os <em>Controllers<\/em> limpos. Com uma vasta biblioteca de regras <em>built-in<\/em> e a capacidade de criar regras customizadas, o Laravel oferece controle total sobre a qualidade dos dados que entram na sua aplica\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um in\u00edcio. Vamos entender quais s\u00e3o os conhecimentos b\u00e1sicos necess\u00e1rios para aproveitar ao m\u00e1ximo este poderoso framework. Para iniciar seus estudos no Laravel, voc\u00ea precisar\u00e1 dominar as seguintes tecnologias:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/category\/html\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html.webp\" alt=\"HTML\" class=\"wp-image-600\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">HTML<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/category\/css\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux.webp\" alt=\"CSS\" class=\"wp-image-702\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">CSS<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/category\/javascript\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript.webp\" alt=\"Javascript\" class=\"wp-image-804\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">JavaScript<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/category\/sql\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2.webp\" alt=\"SQL\" class=\"wp-image-942\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">SQL<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/category\/php\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP.png\" alt=\"Capa Curso PHP\" class=\"wp-image-2835\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP.png 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP-300x169.png 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">PHP<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">E se voc\u00ea gosta do nosso conte\u00fado, n\u00e3o deixe de contribuir adquirindo os servi\u00e7os e produtos dos nossos apoiadores e empresas que somos associados:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/hostinger.com.br\/?REFERRALCODE=1THIAGO62\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/03\/hostinger.png\" alt=\"Hospedagem Hostinger\" class=\"wp-image-92\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/amzn.to\/3SNDYlc\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/ofertas-amazon.webp\" alt=\"Ofertas Amazon\" class=\"wp-image-1308\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/amzn.to\/3SNKmt0\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/amazonprime.webp\" alt=\"Amazon Prime\" class=\"wp-image-1307\"\/><\/a><\/figure>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de leitura: <\/span> <span class=\"rt-time\"> 4<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>Laravel Validation: A Valida\u00e7\u00e3o de Dados \u00e9 uma etapa cr\u00edtica e obrigat\u00f3ria no ciclo de&#8230;<\/p>\n","protected":false},"author":1,"featured_media":1642,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[],"class_list":["post-2693","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","wpcat-18-id"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Laravel Validation - BLOG THIAGO ROSSI<\/title>\n<meta name=\"description\" content=\"Laravel Validation: Neste artigo, exploraremos em detalhes o sistema de Laravel Validation, desde as regras b\u00e1sicas at\u00e9 as mais avan\u00e7adas...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thiagorossi.com.br\/blog\/laravel-validation\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Laravel Validation - BLOG THIAGO ROSSI\" \/>\n<meta property=\"og:description\" content=\"Laravel Validation: Neste artigo, exploraremos em detalhes o sistema de Laravel Validation, desde as regras b\u00e1sicas at\u00e9 as mais avan\u00e7adas...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thiagorossi.com.br\/blog\/laravel-validation\/\" \/>\n<meta property=\"og:site_name\" content=\"BLOG THIAGO ROSSI\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-26T13:40:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-05T14:27:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Laravel.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"758\" \/>\n\t<meta property=\"og:image:height\" content=\"426\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Thiago Rossi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Thiago Rossi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/laravel-validation\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/laravel-validation\\\/\"},\"author\":{\"name\":\"Thiago Rossi\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\"},\"headline\":\"Laravel Validation\",\"datePublished\":\"2024-11-26T13:40:55+00:00\",\"dateModified\":\"2025-12-05T14:27:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/laravel-validation\\\/\"},\"wordCount\":559,\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/laravel-validation\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/Laravel.webp\",\"articleSection\":[\"Laravel\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/laravel-validation\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/laravel-validation\\\/\",\"name\":\"Laravel Validation - BLOG THIAGO ROSSI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/laravel-validation\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/laravel-validation\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/Laravel.webp\",\"datePublished\":\"2024-11-26T13:40:55+00:00\",\"dateModified\":\"2025-12-05T14:27:23+00:00\",\"description\":\"Laravel Validation: Neste artigo, exploraremos em detalhes o sistema de Laravel Validation, desde as regras b\u00e1sicas at\u00e9 as mais avan\u00e7adas...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/laravel-validation\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/laravel-validation\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/laravel-validation\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/Laravel.webp\",\"contentUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/Laravel.webp\",\"width\":758,\"height\":426,\"caption\":\"Laravel\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/laravel-validation\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel Validation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\",\"name\":\"THIAGO ROSSI\",\"description\":\"Mais de 20 anos de experi\u00eancia no mercado de TI!\",\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"alternateName\":\"TR | CURSO WEB DEV\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\",\"name\":\"THIAGO ROSSI\",\"alternateName\":\"TR | CURSO WEB DEV\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/new-logo.webp\",\"contentUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/new-logo.webp\",\"width\":300,\"height\":300,\"caption\":\"THIAGO ROSSI\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/linkedin.com\\\/in\\\/thiagox86\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\",\"name\":\"Thiago Rossi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"caption\":\"Thiago Rossi\"},\"description\":\"Com mais de 20 anos de jornada na tecnologia, minha trajet\u00f3ria evoluiu do ensino t\u00e9cnico \u00e0 arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de solu\u00e7\u00f5es de Intelig\u00eancia Artificial nativa e an\u00e1lise de dados p\u00fablicos, utilizando o ecossistema PHP para transformar dados brutos em transpar\u00eancia e efici\u00eancia. Como autor e desenvolvedor, acredito na democratiza\u00e7\u00e3o do conhecimento. Essa vis\u00e3o resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura at\u00e9 os bastidores da ind\u00fastria de Jogos e IA. No universo de Game Design, sou autor do livro \\\"GDD \u2013 O Guia Definitivo\\\" e documento ativamente meus processos atrav\u00e9s de DevLogs, unindo rigor t\u00e9cnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso \u00e9 conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.\",\"sameAs\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\",\"https:\\\/\\\/instagram.com\\\/thiagorossix86\",\"https:\\\/\\\/linkedin.com\\\/in\\\/thiagox86\"],\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/author\\\/thiagorossi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Laravel Validation - BLOG THIAGO ROSSI","description":"Laravel Validation: Neste artigo, exploraremos em detalhes o sistema de Laravel Validation, desde as regras b\u00e1sicas at\u00e9 as mais avan\u00e7adas...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thiagorossi.com.br\/blog\/laravel-validation\/","og_locale":"pt_BR","og_type":"article","og_title":"Laravel Validation - BLOG THIAGO ROSSI","og_description":"Laravel Validation: Neste artigo, exploraremos em detalhes o sistema de Laravel Validation, desde as regras b\u00e1sicas at\u00e9 as mais avan\u00e7adas...","og_url":"https:\/\/thiagorossi.com.br\/blog\/laravel-validation\/","og_site_name":"BLOG THIAGO ROSSI","article_published_time":"2024-11-26T13:40:55+00:00","article_modified_time":"2025-12-05T14:27:23+00:00","og_image":[{"width":758,"height":426,"url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Laravel.webp","type":"image\/webp"}],"author":"Thiago Rossi","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Thiago Rossi","Est. tempo de leitura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thiagorossi.com.br\/blog\/laravel-validation\/#article","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/laravel-validation\/"},"author":{"name":"Thiago Rossi","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87"},"headline":"Laravel Validation","datePublished":"2024-11-26T13:40:55+00:00","dateModified":"2025-12-05T14:27:23+00:00","mainEntityOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/laravel-validation\/"},"wordCount":559,"publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/laravel-validation\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Laravel.webp","articleSection":["Laravel"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/thiagorossi.com.br\/blog\/laravel-validation\/","url":"https:\/\/thiagorossi.com.br\/blog\/laravel-validation\/","name":"Laravel Validation - BLOG THIAGO ROSSI","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/laravel-validation\/#primaryimage"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/laravel-validation\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Laravel.webp","datePublished":"2024-11-26T13:40:55+00:00","dateModified":"2025-12-05T14:27:23+00:00","description":"Laravel Validation: Neste artigo, exploraremos em detalhes o sistema de Laravel Validation, desde as regras b\u00e1sicas at\u00e9 as mais avan\u00e7adas...","breadcrumb":{"@id":"https:\/\/thiagorossi.com.br\/blog\/laravel-validation\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thiagorossi.com.br\/blog\/laravel-validation\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/laravel-validation\/#primaryimage","url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Laravel.webp","contentUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Laravel.webp","width":758,"height":426,"caption":"Laravel"},{"@type":"BreadcrumbList","@id":"https:\/\/thiagorossi.com.br\/blog\/laravel-validation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thiagorossi.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Laravel Validation"}]},{"@type":"WebSite","@id":"https:\/\/thiagorossi.com.br\/blog\/#website","url":"https:\/\/thiagorossi.com.br\/blog\/","name":"THIAGO ROSSI","description":"Mais de 20 anos de experi\u00eancia no mercado de TI!","publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"alternateName":"TR | CURSO WEB DEV","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thiagorossi.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/thiagorossi.com.br\/blog\/#organization","name":"THIAGO ROSSI","alternateName":"TR | CURSO WEB DEV","url":"https:\/\/thiagorossi.com.br\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/new-logo.webp","contentUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/new-logo.webp","width":300,"height":300,"caption":"THIAGO ROSSI"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/linkedin.com\/in\/thiagox86"]},{"@type":"Person","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87","name":"Thiago Rossi","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","caption":"Thiago Rossi"},"description":"Com mais de 20 anos de jornada na tecnologia, minha trajet\u00f3ria evoluiu do ensino t\u00e9cnico \u00e0 arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de solu\u00e7\u00f5es de Intelig\u00eancia Artificial nativa e an\u00e1lise de dados p\u00fablicos, utilizando o ecossistema PHP para transformar dados brutos em transpar\u00eancia e efici\u00eancia. Como autor e desenvolvedor, acredito na democratiza\u00e7\u00e3o do conhecimento. Essa vis\u00e3o resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura at\u00e9 os bastidores da ind\u00fastria de Jogos e IA. No universo de Game Design, sou autor do livro \"GDD \u2013 O Guia Definitivo\" e documento ativamente meus processos atrav\u00e9s de DevLogs, unindo rigor t\u00e9cnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso \u00e9 conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.","sameAs":["https:\/\/thiagorossi.com.br\/blog","https:\/\/instagram.com\/thiagorossix86","https:\/\/linkedin.com\/in\/thiagox86"],"url":"https:\/\/thiagorossi.com.br\/blog\/author\/thiagorossi\/"}]}},"_links":{"self":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/2693","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/comments?post=2693"}],"version-history":[{"count":2,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/2693\/revisions"}],"predecessor-version":[{"id":5174,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/2693\/revisions\/5174"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/media\/1642"}],"wp:attachment":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/media?parent=2693"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/categories?post=2693"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/tags?post=2693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}