{"id":47037,"date":"2024-11-28T15:37:04","date_gmt":"2024-11-28T18:37:04","guid":{"rendered":"\/tutoriais\/?p=47037"},"modified":"2026-03-10T12:59:58","modified_gmt":"2026-03-10T15:59:58","slug":"tutorial-laravel","status":"publish","type":"post","link":"\/pt\/tutoriais\/tutorial-laravel","title":{"rendered":"Tutorial Laravel: tudo o que voc\u00ea precisa saber para come\u00e7ar com o framework"},"content":{"rendered":"<?xml encoding=\"utf-8\" ?><p>O Laravel &eacute; um framework PHP de c&oacute;digo aberto muito conhecido por sua sintaxe amig&aacute;vel e sua comunidade ativa. Ele &eacute; bastante popular entre desenvolvedores PHP para a constru&ccedil;&atilde;o de v&aacute;rios tipos de aplica&ccedil;&otilde;es web, como lojas virtuais, plataformas de m&iacute;dia social e sistemas de gerenciamento de conte&uacute;do.<\/p><p>Se voc&ecirc; n&atilde;o sabe bem por onde come&ccedil;ar, este tutorial Laravel vai explicar tudo sobre este framework, incluindo seus benef&iacute;cios, processo de instala&ccedil;&atilde;o e termos importantes. Voc&ecirc; tamb&eacute;m aprender&aacute; conceitos mais avan&ccedil;ados, como o comando PHP Artisan e como lidar com erros. Vamos l&aacute;?<\/p><p>\n\n\n\n<\/p><h2 class=\"wp-block-heading\" id=\"h-comecando-com-laravel\"><strong>Come&ccedil;ando com Laravel<\/strong><\/h2><p>Frameworks como o Laravel fornecem ferramentas e recursos pr&eacute;-constru&iacute;dos que permitem aos desenvolvedores criar um aplicativo sem escrever todo o c&oacute;digo do zero. Por exemplo, voc&ecirc; pode instalar o pacote Bagisto para adicionar funcionalidades de e-commerce, como gerenciamento de estoque.<\/p><p>O Laravel &eacute; muito popular especialmente por conta das seguintes caracter&iacute;sticas. N&oacute;s vamos abord&aacute;-los com mais detalhes nas pr&oacute;ximas se&ccedil;&otilde;es:<\/p><ul class=\"wp-block-list\">\n<li><strong>Sintaxe elegante<\/strong>&nbsp;&ndash; o Laravel permite que voc&ecirc; use um c&oacute;digo PHP mais simples, eficiente e leg&iacute;vel para agilizar o processo de desenvolvimento.<\/li>\n\n\n\n<li><strong>Arquitetura MVC<\/strong>&nbsp;&ndash; O modelo Model-view-controller do Laravel fornece uma estrutura mais clara para os componentes do seu aplicativo.<\/li>\n\n\n\n<li><strong>PHP Artisan<\/strong>&nbsp;&ndash; Uma ferramenta de linha de comando que simplifica tarefas complexas durante o desenvolvimento, como atualiza&ccedil;&otilde;es de banco de dados ou cria&ccedil;&atilde;o de componentes.<\/li>\n\n\n\n<li><strong>Eloquent ORM<\/strong>&nbsp;&ndash; O mapeamento objeto-relacional Eloquent fornece uma comunica&ccedil;&atilde;o de banco de dados mais direta atrav&eacute;s da abordagem orientada a objetos.<\/li>\n<\/ul><p>Em termos de sistema operacional, voc&ecirc; pode&nbsp;<a href=\"\/pt\/tutoriais\/como-instalar-laravel-ubuntu\"><strong>instalar o Laravel no Ubuntu<\/strong><\/a>, no CentOS e em outras distribui&ccedil;&otilde;es Linux populares. Antes de fazer isso, no entanto, voc&ecirc; deve configurar alguns componentes de software, incluindo o runtime do PHP, Composer e Apache. Se voc&ecirc; quiser um processo de instala&ccedil;&atilde;o muito simples, basta adquirir um&nbsp;<a href=\"\/pt\/vps\/hospedagem-laravel\"><strong>plano de Hospedagem VPS Laravel da Hostinger<\/strong><\/a>. Com ele, voc&ecirc; pode completar o processo de configura&ccedil;&atilde;o inicial e ter o Laravel instalado automaticamente em cerca de 15 minutos.<\/p><figure class=\"wp-block-image size-large\"><a href=\"\/pt\/alojamento-vps\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/blog.hostinger.io\/pt-tutoriais\/wp-content\/uploads\/sites\/26\/2023\/02\/BR-VPS-hosting_in-text-banner-1-1024x300.png\" alt=\"\" class=\"wp-image-32923\" srcset=\"https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-content\/uploads\/sites\/26\/2023\/02\/BR-VPS-hosting_in-text-banner-1.png 1024w, https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-content\/uploads\/sites\/26\/2023\/02\/BR-VPS-hosting_in-text-banner-1-300x88.png 300w, https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-content\/uploads\/sites\/26\/2023\/02\/BR-VPS-hosting_in-text-banner-1-150x44.png 150w, https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-content\/uploads\/sites\/26\/2023\/02\/BR-VPS-hosting_in-text-banner-1-768x225.png 768w, https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-content\/uploads\/sites\/26\/2023\/02\/BR-VPS-hosting_in-text-banner-1-1536x450.png 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><p>Al&eacute;m disso, voc&ecirc; deve configurar um ambiente de desenvolvimento integrado (IDE) no seu computador para escrever o c&oacute;digo da sua aplica&ccedil;&atilde;o. Para&nbsp;<a href=\"\/pt\/tutoriais\/como-implantar-laravel\"><strong>implantar um aplicativo Laravel<\/strong><\/a>&nbsp;no seu VPS, voc&ecirc; precisa de&nbsp;<strong>Git<\/strong>&nbsp;ou de um software de automa&ccedil;&atilde;o, como o&nbsp;<strong>Jenkins<\/strong>.<\/p><p><div><p class=\"important\"><strong>Importante! <\/strong>Dependendo da sua vers&atilde;o do Laravel, alguns conceitos podem diferir. Para este tutorial, vamos nos concentrar no&nbsp;<strong>Laravel 11.X<\/strong>.<\/p><\/div>\n\n\n\n<\/p><h2 class=\"wp-block-heading\" id=\"h-entendendo-a-arquitetura-mvc\"><strong>Entendendo a arquitetura MVC<\/strong><\/h2><p>Um dos conceitos mais importantes no Laravel &eacute; a sua arquitetura MVC. Basicamente falando, esse modelo permite que os desenvolvedores dividam um aplicativo em tr&ecirc;s componentes para facilitar o gerenciamento de c&oacute;digo, a prioriza&ccedil;&atilde;o a separa&ccedil;&atilde;o de conceitos.<\/p><p><strong>Componentes de modelo<\/strong><\/p><p>Os componentes de modelo representam a l&oacute;gica de neg&oacute;cio e armazenamento do seu aplicativo. Eles s&atilde;o respons&aacute;veis pelas opera&ccedil;&otilde;es de banco de dados, incluindo escrever e buscar informa&ccedil;&otilde;es espec&iacute;ficas do back-end com base no pedido do usu&aacute;rio.<\/p><p>O Laravel usa o Eloquent ORM para lidar com opera&ccedil;&otilde;es relacionadas ao modelo, que usam a abordagem orientada a objetos. Isso torna a manipula&ccedil;&atilde;o de dados muito mais r&aacute;pida e flex&iacute;vel do que usar SQL.<\/p><p><strong>Componentes de visualiza&ccedil;&atilde;o<\/strong><\/p><p>A camada de visualiza&ccedil;&atilde;o define a &aacute;rea do seu aplicativo que os usu&aacute;rios podem ver na tela dos seus dispositivos e interagir. Ela cobre elementos como menus suspensos, caixas de texto e campos de formul&aacute;rio.<\/p><p>Para simplificar o desenvolvimento de componentes de visualiza&ccedil;&atilde;o, o Laravel oferece um motor Blade que permite incorporar PHP em templates HTML. Esse recurso permite que voc&ecirc; crie c&oacute;digo reutiliz&aacute;vel e exiba dados do back-end de maneira mais f&aacute;cil.<\/p><p><strong>Componentes do controlador<\/strong><\/p><p>O controlador conecta os dois componentes anteriores na sua aplica&ccedil;&atilde;o Laravel. Ele busca a solicita&ccedil;&atilde;o de dados da camada de modelo e apresenta as informa&ccedil;&otilde;es processadas na interface para o componente de visualiza&ccedil;&atilde;o.<\/p><p>Voc&ecirc; pode usar v&aacute;rios m&eacute;todos para dizer ao controlador para interagir com os dados de maneira diferente. Por exemplo,&nbsp;<strong>index<\/strong>&nbsp;recupera registros do banco de dados enquanto&nbsp;<strong>store<\/strong>&nbsp;insere novos recursos.<\/p><h2 class=\"wp-block-heading\" id=\"h-criando-rotas-e-urls\"><strong>Criando rotas e URLs<\/strong><\/h2><p>Quando um usu&aacute;rio acessa sua aplica&ccedil;&atilde;o, ele envia uma solicita&ccedil;&atilde;o que ser&aacute; tratada por um controlador. A rota direciona a solicita&ccedil;&atilde;o de entrada atrav&eacute;s de uma URL espec&iacute;fica para alcan&ccedil;ar o controlador apropriado e retornar dados para a camada de visualiza&ccedil;&atilde;o.<\/p><p>Voc&ecirc; pode criar m&uacute;ltiplas rotas Laravel com base nos m&eacute;todos HTTP da solicita&ccedil;&atilde;o &mdash; como GET, POST, PUT, DELETE e PATCH. Por padr&atilde;o, eles est&atilde;o localizados no arquivo&nbsp;<strong>web.php<\/strong>&nbsp;dentro da pasta&nbsp;<strong>routes<\/strong>&nbsp;do diret&oacute;rio do seu projeto Laravel.<\/p><p>Para criar uma rota, chame a fun&ccedil;&atilde;o auxiliar&nbsp;<strong>Route&nbsp;<\/strong>ou a&nbsp;<a href=\"https:\/\/laravel.com\/docs\/11.x\/facades\" target=\"_blank\" rel=\"noopener\"><strong>facade<\/strong><\/a>&nbsp;adicionando a seguinte linha no topo do seu arquivo&nbsp;<strong>web.php<\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">use IlluminateSupportFacadesRoute;<\/pre><p>Em seguida, especifique sua rota. Por exemplo, a rota abaixo lidar&aacute; com usu&aacute;rios que enviam a solicita&ccedil;&atilde;o HTTP&nbsp;<strong>GET<\/strong>para a URL&nbsp;<strong>dominio.tld\/boas-vindas<\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Route::get('\/boas-vindas', function () {\n  \/\/Escreva sua l&oacute;gica de controlador aqui;\n});<\/pre><p>Se voc&ecirc; quer configurar uma rota para um controlador espec&iacute;fico, tamb&eacute;m pode chamar sua facade e adicionar a rota como a seguir:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">use AppHttpControllersHomeController;\n\nRoute::get('\/home', [HomeController::class, 'index']);<\/pre><p>No exemplo, n&oacute;s direcionamos solicita&ccedil;&otilde;es com o m&eacute;todo&nbsp;<strong>GET<\/strong>&nbsp;de&nbsp;<strong>dominio.tld\/home<\/strong>&nbsp;para o controlador&nbsp;<strong>HomeController<\/strong>, que vai lidar com isso usando o m&eacute;todo&nbsp;<strong>&nbsp;INDEX&nbsp;<\/strong>. A sintaxe&nbsp;<strong>&nbsp;::class<\/strong>&nbsp;permite que voc&ecirc; use o controlador sem especificar todo o caminho da facade.<\/p><p>O Laravel pode processar solicita&ccedil;&otilde;es atrav&eacute;s de um middleware antes de pass&aacute;-las para os controladores para processamento adicional, como registro ou autentica&ccedil;&atilde;o. Considere este exemplo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Route::get('\/boas-vindas', function () {\n   return view('boas-vindas');\n})-&gt;middleware('log.request');<\/pre><p>Lembre-se, voc&ecirc; deve criar o middleware atrav&eacute;s do PHP Artisan. Vamos explicar como fazer isso mais abaixo, na se&ccedil;&atilde;o sobre t&eacute;cnicas avan&ccedil;adas do Laravel.<\/p><h2 class=\"wp-block-heading\" id=\"h-trabalhando-com-controladores\"><strong>Trabalhando com controladores<\/strong><\/h2><p>Os controladores agrupam solicita&ccedil;&otilde;es com a mesma l&oacute;gica em uma classe. Isso torna o processamento mais eficiente, pois voc&ecirc; pode fazer m&uacute;ltiplas solicita&ccedil;&otilde;es usando um &uacute;nico manipulador.<\/p><p>Por exemplo, voc&ecirc; pode criar um HomeController para processar todas as solicita&ccedil;&otilde;es vindas da URL \/home. Por padr&atilde;o, os controladores est&atilde;o localizados em&nbsp;<strong>app\/Http\/Controllers<\/strong>. Para configurar um controlador, execute o seguinte comando PHP artisan:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan make:controller NomeDoControlador<\/pre><p>Em seguida, defina os m&eacute;todos de manipula&ccedil;&atilde;o de solicita&ccedil;&otilde;es dentro do novo arquivo. Por exemplo, o seguinte manipulador&nbsp;<strong>GET<\/strong>&nbsp;atende solicita&ccedil;&otilde;es enviadas atrav&eacute;s da rota&nbsp;<strong>product\/id<\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">namespace AppHttpControllers;\nuse AppModelsProduct;\nuse IlluminateHttpRequest;\nclass ProductController extends Controller\n{\n   \/\/ GET \/product\/{id}\n   public function show($id)\n   {\n       $product = Product::find($id);\n      \n       if (!$product) {\n           abort(404); \/\/ Retorna um erro 404 se o produto n&atilde;o for encontrado\n       }\n       return view('products.show', compact('product')); \/\/ Retorna uma visualiza&ccedil;&atilde;o com os dados do produto\n   }\n}<\/pre><p>Para lidar com as opera&ccedil;&otilde;es comuns de criar, ler, atualizar e deletar (CRUD), voc&ecirc; pode configurar um controlador de recurso com um conjunto de m&eacute;todos predefinidos. Aqui est&aacute; o comando:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan make:controller NomeDoControlador --controller<\/pre><h2 class=\"wp-block-heading\" id=\"h-criando-visualizacoes-com-o-motor-de-template-blade\"><strong>Criando visualiza&ccedil;&otilde;es com o motor de template Blade<\/strong><\/h2><p>O&nbsp;<a href=\"https:\/\/laravel.com\/docs\/11.x\/blade\" target=\"_blank\" rel=\"noopener\"><strong>motor de template Blade<\/strong><\/a>&nbsp;proporciona uma integra&ccedil;&atilde;o perfeita do PHP no HTML usando uma sintaxe mais simples. Ele ajuda voc&ecirc; a criar componentes de visualiza&ccedil;&atilde;o para o seu aplicativo com mais facilidade.<\/p><p>Para construir uma visualiza&ccedil;&atilde;o usando Blade, crie um arquivo com a extens&atilde;o&nbsp;<strong>.blade.php<\/strong>&nbsp;dentro do diret&oacute;rio&nbsp;<strong>resources\/views&nbsp;<\/strong>do seu projeto Laravel.<\/p><p>A estrutura do c&oacute;digo &eacute; a mesma do HTML, mas com sintaxes adicionais para PHP. Por exemplo, voc&ecirc; pode inserir uma vari&aacute;vel assim:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&amp;lt;h1&amp;gt;{{ $title }}&amp;lt;\/h1&amp;gt;<\/pre><p>No exemplo acima, o Laravel passa o valor da vari&aacute;vel PHP&nbsp;<strong>$title<\/strong>&nbsp;para o componente de visualiza&ccedil;&atilde;o, exibindo-o para os usu&aacute;rios.<\/p><p>Voc&ecirc; tamb&eacute;m pode adicionar diretivas que manipulam seus elementos HTML usando fun&ccedil;&otilde;es PHP. Por exemplo,&nbsp;<strong>@if<\/strong>permite que voc&ecirc; exiba um conte&uacute;do espec&iacute;fico se uma condi&ccedil;&atilde;o for atendida, como no seguinte:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@if($user-&gt;'Nome-de-usu&aacute;rio')\n &lt;h1&gt;Feliz em te ver, Nome-de-usu&aacute;rio!&lt;\/h1&gt;\n@endif<\/pre><p>Para melhorar a reutiliza&ccedil;&atilde;o de c&oacute;digo, o Blade oferece um recurso de heran&ccedil;a de template que permite criar um layout mestre e adicionar componentes menores, chamados&nbsp;<strong>child views<\/strong>, separadamente. Voc&ecirc; pode fazer isso usando as diretivas&nbsp;<strong>@extends<\/strong>,&nbsp;<strong>@section<\/strong>&nbsp;e&nbsp;<strong>@yield<\/strong>.<\/p><p>Por exemplo, temos um template mestre com o seguinte c&oacute;digo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;title&gt;@yield('titulodosite')&lt;\/title&gt;<\/pre><p>A diretiva&nbsp;<strong>@yield&nbsp;<\/strong>&nbsp;&eacute; um espa&ccedil;o reservado para conte&uacute;do de uma child view marcada com&nbsp;<strong>@section<\/strong>. Por exemplo, a linha abaixo ir&aacute; inserir&nbsp;<strong>Seu Incr&iacute;vel Site&nbsp;<\/strong>na tag de t&iacute;tulo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@section('titulodosite', 'Seu Incr&iacute;vel Site')<\/pre><p>Por fim, adicione a diretiva&nbsp;<strong>@extends<\/strong>&nbsp;&agrave; child view para informar ao template principal qual arquivo ele deve usar para estender seu conte&uacute;do.<\/p><h2 class=\"wp-block-heading\" id=\"h-gerenciando-o-banco-de-dados-com-eloquent-orm\"><strong>Gerenciando o banco de dados com Eloquent ORM<\/strong><\/h2><p><a href=\"https:\/\/laravel.com\/docs\/11.x\/eloquent\" target=\"_blank\" rel=\"noopener\"><strong>Eloquent ORM<\/strong><\/a>&nbsp;permite que sua aplica&ccedil;&atilde;o interaja com as tabelas do banco de dados de maneira mais eficiente usando um c&oacute;digo mais curto do que o SQL tradicional. Em vez de manipular dados diretamente usando tabelas, o Laravel atribui um modelo para simplificar as opera&ccedil;&otilde;es de CRUD.<\/p><p>Voc&ecirc; pode criar um novo modelo Eloquent em qualquer lugar dentro da pasta&nbsp;<strong>app<\/strong>&nbsp;do seu projeto Laravel, j&aacute; que o arquivo&nbsp;<strong>Composer.json<\/strong>&nbsp;vai localiz&aacute;-lo automaticamente. Se voc&ecirc; n&atilde;o especificar um diret&oacute;rio, o framework de aplica&ccedil;&atilde;o web usar&aacute; o diret&oacute;rio padr&atilde;o&nbsp;<strong>app\/Models<\/strong>. Para criar um novo modelo, execute o comando PHP Artisan assim. Substitua&nbsp;<strong>Nome<\/strong>&nbsp;pelo nome do modelo que voc&ecirc; deseja:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan make:model Nome<\/pre><p>Por padr&atilde;o, o Laravel assume que a tabela correspondente &eacute; a forma em plural do nome do seu modelo. Por exemplo, o comando anterior vai atribuir o modelo&nbsp;<strong>Post<\/strong>&nbsp;para a coluna de banco de dados&nbsp;<strong>posts&nbsp;<\/strong>.<\/p><p>Agora, vamos programar c&oacute;digo Eloquent dentro do seu controlador para a opera&ccedil;&atilde;o CRUD. Por exemplo, o c&oacute;digo abaixo ir&aacute; recuperar contas do modelo&nbsp;<strong>User<\/strong>&nbsp;com o status&nbsp;<strong>Active<\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$activeUsers = User::where('status', 'active')-&amp;gt;get();<\/pre><p>Normalmente, precisamos do seguinte para realizar a mesma opera&ccedil;&atilde;o usando SQL:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$activeUsers = DB::select('SELECT * FROM users WHERE status = ?', ['active']);<\/pre><p>O Laravel tamb&eacute;m permite que voc&ecirc; estabele&ccedil;a rela&ccedil;&otilde;es entre registros em diferentes modelos Eloquent para uma organiza&ccedil;&atilde;o de dados mais eficiente. Aqui est&atilde;o as conex&otilde;es suportadas:<\/p><ul class=\"wp-block-list\">\n<li><strong>One-to-one<\/strong>&nbsp;&ndash; um registro est&aacute; associado a outro registro em um modelo diferente. Por exemplo, um nome de usu&aacute;rio com seu ID de usu&aacute;rio.<\/li>\n\n\n\n<li><strong>One-to-many&nbsp;<\/strong>&ndash; um registro se conecta a m&uacute;ltiplos valores de um modelo. Por exemplo, um usu&aacute;rio de loja virtual com suas notas fiscais de compra.<\/li>\n\n\n\n<li><strong>Many-to-many&nbsp;<\/strong>&nbsp;&ndash; m&uacute;ltiplos registros se relacionam com m&uacute;ltiplos registros de outra tabela. Um exemplo dessa rela&ccedil;&atilde;o s&atilde;o produtos e etiquetas.<\/li>\n<\/ul><p>O Laravel tamb&eacute;m possui um recurso de migra&ccedil;&atilde;o que ajuda a manter a consist&ecirc;ncia entre bancos de dados em diferentes ambientes ou vers&otilde;es. Ele tamb&eacute;m permite que voc&ecirc; crie colunas em um novo modelo com uma &uacute;nica execu&ccedil;&atilde;o.<\/p><p>Para criar um arquivo de migra&ccedil;&atilde;o para uma tabela, execute o seguinte comando:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan make:migration create_example_table<\/pre><p>Voc&ecirc; tamb&eacute;m pode criar um arquivo de migra&ccedil;&atilde;o ao configurar um modelo adicionando a op&ccedil;&atilde;o -m ou &ndash;migration assim:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan make:model Post --migration<\/pre><p>O Laravel vai criar um arquivo de migra&ccedil;&atilde;o dentro do diret&oacute;rio database\/migrations. Dentro dele, especifique dois comandos &ndash;&nbsp;<strong>&nbsp;up()<\/strong>&nbsp;e&nbsp;<strong>down()<\/strong>. A fun&ccedil;&atilde;o&nbsp;<strong>up()&nbsp;<\/strong>define as altera&ccedil;&otilde;es a serem feitas quando voc&ecirc; executa o comando&nbsp;<strong>PHP Artisan migrate<\/strong>, enquanto&nbsp;<strong>down()<\/strong>&nbsp;especifica o m&eacute;todo para reverter as modifica&ccedil;&otilde;es. Aqui est&aacute; um exemplo do c&oacute;digo completo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?php\nuse IlluminateDatabaseMigrationsMigration;\nuse IlluminateDatabaseSchemaBlueprint;\nuse IlluminateSupportFacadesSchema;\nclass CreatePostsTable extends Migration\n{\n   \/**\n    * Executar as migra&ccedil;&otilde;es.\n    *\n    * @return void\n    *\/\n   public function up()\n   {\n           Schema::create('posts', function (Blueprint $table) {\n           $table-&gt;id(); \/\/ Chave prim&aacute;ria com incrementa&ccedil;&atilde;o autom&aacute;tica\n           $table-&gt;string('title'); \/\/ Coluna para o t&iacute;tulo do post\n           $table-&gt;text('body'); \/\/ Coluna para o conte&uacute;do do post\n           $table-&gt;timestamps(); \/\/ Marcadores de data e hora de cria&ccedil;&atilde;o e atualiza&ccedil;&atilde;o\n       });\n   }\n   \/**\n    * Reverter as migra&ccedil;&otilde;es.\n    *\n    * @return void\n    *\/\n   public function down()\n   {\n       Schema::dropIfExists('posts');\n   }\n}<\/pre><p>Se voc&ecirc; executar o seguinte comando, as fun&ccedil;&otilde;es dentro de&nbsp;<strong>up()&nbsp;<\/strong>&nbsp;ser&atilde;o executadas, criando as colunas&nbsp;<strong>id<\/strong>,&nbsp;<strong>string<\/strong>,&nbsp;<strong>text<\/strong>&nbsp;e&nbsp;<strong>timestamp<\/strong>&nbsp;dentro da tabela&nbsp;<strong>posts&nbsp;<\/strong>.<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan migrate<\/pre><p>Para reverter as altera&ccedil;&otilde;es, execute o seguinte comando. Ele executar&aacute; a fun&ccedil;&atilde;o&nbsp;<strong>down()<\/strong>, removendo a tabela de posts rec&eacute;m-criada:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan migrate:rollback<\/pre><p>Desenvolvedores e administradores costumam migram o banco de dados ao precisar modificar os esquemas, seja durante testes, implanta&ccedil;&atilde;o ou configura&ccedil;&atilde;o de um novo ambiente.<\/p><h2 class=\"wp-block-heading\" id=\"h-implementando-autenticacao-e-autorizacao\"><strong>Implementando autentica&ccedil;&atilde;o e autoriza&ccedil;&atilde;o<\/strong><\/h2><p>Implementar um mecanismo adequado de autentica&ccedil;&atilde;o e autoriza&ccedil;&atilde;o &eacute; crucial para a integridade e seguran&ccedil;a do seu aplicativo web. Como construir esse sistema manualmente &eacute; complicado, o Laravel oferece um conjunto de ferramentas que permite desenvolv&ecirc;-lo mais facilmente.<\/p><p><strong>Autentica&ccedil;&atilde;o Laravel<\/strong><\/p><p>O Laravel usa&nbsp;<strong>guards&nbsp;<\/strong>para definir o m&eacute;todo de autentica&ccedil;&atilde;o dos usu&aacute;rios e provedores para recuperar as informa&ccedil;&otilde;es da conta de um armazenamento persistente, como um banco de dados. A l&oacute;gica de autentica&ccedil;&atilde;o est&aacute; localizada dentro do arquivo&nbsp;<strong>config\/auth.php<\/strong>. Aqui est&aacute; um exemplo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">'guards' =&gt; [\n   'web' =&gt; [\n       'driver' =&gt; 'session',\n       'provider' =&gt; 'users',\n   ],\n'providers' =&gt; [\n   'users' =&gt; [\n       'driver' =&gt; 'eloquent',\n       'model' =&gt; AppModelsUser::class,\n   ],\n],<\/pre><p>No exemplo acima, usamos um guard para autenticar solicita&ccedil;&otilde;es &agrave; nossa aplica&ccedil;&atilde;o web usando um m&eacute;todo de sess&atilde;o baseado em cookies. Ele utiliza um provedor chamado&nbsp;<strong>users<\/strong>, que usa o mecanismo Eloquent ORM para recuperar os registros da conta do modelo&nbsp;<strong>user<\/strong>.<\/p><p>O Laravel tamb&eacute;m oferece os kits iniciantes&nbsp;<strong>Jetstream<\/strong>&nbsp;e&nbsp;<a href=\"https:\/\/laravel.com\/docs\/11.x\/starter-kits\" target=\"_blank\" rel=\"noopener\"><strong>Breeze<\/strong><\/a>, que fornecem um sistema de autentica&ccedil;&atilde;o pronto para uso. Recomendamos a instala&ccedil;&atilde;o deles para obter uma compreens&atilde;o b&aacute;sica da implementa&ccedil;&atilde;o do c&oacute;digo, que pode ajud&aacute;-lo a configurar uma l&oacute;gica personalizada mais tarde.<\/p><p><strong>Autoriza&ccedil;&atilde;o Laravel<\/strong><\/p><p>A autoriza&ccedil;&atilde;o do Laravel usa dois componentes:&nbsp;<strong>gates<\/strong>&nbsp;e&nbsp;<strong>policies<\/strong>. Os gates (port&otilde;es) verificam se um usu&aacute;rio tem permiss&atilde;o para realizar uma a&ccedil;&atilde;o espec&iacute;fica. Enquanto isso, as policies (pol&iacute;ticas) definem uma l&oacute;gica de autoriza&ccedil;&atilde;o para a&ccedil;&otilde;es coletivas dentro do mesmo modelo.<\/p><p>Gates s&atilde;o adequados para a&ccedil;&otilde;es &uacute;nicas, enquanto policies s&atilde;o &uacute;teis para autorizar processos mais complicados. Dependendo das suas aplica&ccedil;&otilde;es Laravel, voc&ecirc; pode usar uma ou ambas.<\/p><p>Registre um gate usando o m&eacute;todo&nbsp;<strong>boot&nbsp;<\/strong>dentro de<strong>App\/Providers\/AppServiceProvider<\/strong>. Por exemplo, abaixo trazemos um exemplo para comparar o ID do usu&aacute;rio de uma conta que quer editar um post e seu autor:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">use AppModelsPost;\nuse AppModelsUser;\nuse IlluminateSupportFacadesGate;\npublic function boot(): void\n{\n   Gate::define('update-post', function (User $user, Post $post) {\n       return $user-&gt;id === $post-&gt;user_id;\n   });\n}<\/pre><p>Em seguida, voc&ecirc; pode chamar o gate para seus controladores ou templates Blade e especificar a resposta com base no resultado da autoriza&ccedil;&atilde;o. Por exemplo, voc&ecirc; pode configurar sua aplica&ccedil;&atilde;o para retornar uma mensagem quando encontrar erros de valida&ccedil;&atilde;o. Ao mesmo tempo, crie uma policy usando o comando PHP Artisan. Por exemplo, o exemplo abaixo criar&aacute; a policy&nbsp;<strong>&nbsp;PostPolicy<\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan make:policy PostPolicy<\/pre><p>Ent&atilde;o, registre-o usando o m&eacute;todo&nbsp;<strong>&nbsp;boot<\/strong>&nbsp;dentro de&nbsp;<strong>AuthServiceProvider.php<\/strong>. Neste exemplo, atribu&iacute;mos a policy ao modelo&nbsp;<strong>Post<\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">namespace AppProviders;\nuse AppModelsPost;\nuse AppPoliciesPostPolicy;\nuse IlluminateFoundationSupportProvidersAuthServiceProvider as ServiceProvider;\nuse IlluminateSupportFacadesGate;\nclass AuthServiceProvider extends ServiceProvider\n{\n   protected $policies = [\n       Post::class =&gt; PostPolicy::class, \/\/ Registrando a policy para o modelo de post\n   ];\n   public function boot(): void\n   {\n   \/\/ Especifique o gate aqui\n   }\n}<\/pre><p>Agora voc&ecirc; pode escrever a l&oacute;gica de autoriza&ccedil;&atilde;o dentro do arquivo da sua nova policy, que no nosso caso &eacute;&nbsp;<strong>PostPolicy.php<\/strong>. Para aplic&aacute;-la, chame a fun&ccedil;&atilde;o no seu controlador e especifique a resposta.<\/p><h2 class=\"wp-block-heading\" id=\"h-manipulando-formularios-e-validacao\"><strong>Manipulando formul&aacute;rios e valida&ccedil;&atilde;o<\/strong><\/h2><p>A capacidade do Laravel de se comunicar e autorizar bancos de dados de maneira eficiente permite que voc&ecirc; crie formul&aacute;rios facilmente.<\/p><p>Por exemplo, vamos criar um formul&aacute;rio que coleta nomes de usu&aacute;rio e endere&ccedil;os de email. Para come&ccedil;ar, crie um componente de visualiza&ccedil;&atilde;o usando Blade. Aqui est&aacute; um exemplo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"pt-br\"&gt;\n&lt;head&gt;\n   &lt;meta charset=\"UTF-8\"&gt;\n   &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n   &lt;title&gt;Formul&aacute;rio Simples&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n   &lt;h1&gt;Envie Suas Informa&ccedil;&otilde;es&lt;\/h1&gt;\n   @if (session('success'))\n       &lt;div style=\"color: green;\"&gt;{{ session('success') }}&lt;\/div&gt;\n   @endif\n\n   @if ($errors-&gt;any())\n       &lt;div style=\"color: red;\"&gt;\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   &lt;form action=\"{{ route('form.submit') }}\" method=\"POST\"&gt;\n       @csrf\n       &lt;label para=\"name\"&gt;Nome:&lt;\/label&gt;\n       &lt;input type=\"text\" id=\"name\" name=\"name\" required&gt;\n       &lt;label for=\"email\"&gt;Email:&lt;\/label&gt;\n       &lt;input type=\"email\" id=\"email\" name=\"email\" required&gt;\n       &lt;button type=\"submit\"&gt;Enviar&lt;\/button&gt;\n   &lt;\/form&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/pre><p>Ent&atilde;o, adicione as rotas em&nbsp;<strong>web.php<\/strong>, especificando qual controlador ir&aacute; lidar com os envios de formul&aacute;rio. No nosso caso, precisamos de dois, para os m&eacute;todos&nbsp;<strong>GET<\/strong>&nbsp;e&nbsp;<strong>POST<\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">use AppHttpControllersFormController;\n\nRoute::get('\/form', [FormController::class, 'show'])-&gt;name('form.show');\nRoute::post('\/form-submit', [FormController::class, 'submit'])-&gt;name('form.submit');<\/pre><p>Agora, vamos criar o controlador usando o seguinte comando:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan make:controller FormController<\/pre><p>Adicione o seguinte c&oacute;digo ao arquivo&nbsp;<strong>FormController.php<\/strong>&nbsp;para configurar seu controlador, que validar&aacute; a entrada do usu&aacute;rio e comparar&aacute; os dados com as entradas do banco de dados:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">namespace AppHttpControllers;\nuse IlluminateHttpRequest;\nuse AppModelsUser; \/\/ Certifique-se de importar seu modelo User\nclass FormController extends Controller\n{\n   public function show()\n   {\n       return view('simple-form');\n   }\n   public function submit(Request $request)\n   {\n       \/\/ Valide a entrada\n       $request-&gt;validate([\n           'name' =&gt; 'required|string|max:255',\n           'email' =&gt; 'required|email|max:255|exists:users,email', \/\/ Verifique se o email existe\n       ]);\n       return redirect()-&gt;route('form.show')-&gt;with('success', 'Formul&aacute;rio enviado com sucesso!');\n   }\n}<\/pre><p>Conforme especificado no arquivo Blade, se o nome de usu&aacute;rio e o email inseridos existirem no banco de dados, sua visualiza&ccedil;&atilde;o de front-end retornar&aacute; uma mensagem de sucesso. Caso contr&aacute;rio, ele vai gerar um erro.<\/p><p>Se voc&ecirc; quer verifica&ccedil;&otilde;es mais completas, pode implementar um sistema de autoriza&ccedil;&atilde;o usando gates e policies.<\/p><h2 class=\"wp-block-heading\" id=\"h-tecnicas-avancadas-de-laravel\"><strong>T&eacute;cnicas avan&ccedil;adas de Laravel<\/strong><\/h2><p>Aqui est&atilde;o algumas t&eacute;cnicas avan&ccedil;adas de Laravel que podem melhorar a efici&ecirc;ncia do seu desenvolvimento de aplicativos web.<\/p><h3 class=\"wp-block-heading\" id=\"h-usando-a-linha-de-comando-php-artisan-do-laravel\"><strong>Usando a linha de comando PHP Artisan do Laravel<\/strong><\/h3><p><a href=\"https:\/\/laravel.com\/docs\/11.x\/artisan\" target=\"_blank\" rel=\"noopener\"><strong>PHP Artisan<\/strong><\/a>&nbsp;&eacute; um aplicativo de linha de comando que permite que voc&ecirc; interaja com o framework do seu aplicativo, automatize tarefas complexas e gerencie recursos para um processo de desenvolvimento mais eficiente. Ele vem pr&eacute;-configurado com a sua instala&ccedil;&atilde;o Laravel.<\/p><p>Para listar os comandos PHP Artisan dispon&iacute;veis, execute o seguinte:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan list<\/pre><p>Enquanto isso, use o argumento&nbsp;<strong>help<\/strong>&nbsp;para verificar o manual de um comando, incluindo as op&ccedil;&otilde;es que ele aceita. Por exemplo, execute o seguinte para verificar o utilit&aacute;rio&nbsp;<strong>migrate&nbsp;<\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan help migrate<\/pre><p>Um dos comandos PHP Artisan mais comuns &eacute; o&nbsp;<strong>make<\/strong>, que permite criar v&aacute;rios itens, incluindo outro comando, controlador e middleware. Aqui est&aacute; a sintaxe:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan make:item [option]<\/pre><p>Outro comando importante &eacute; o&nbsp;<strong>&nbsp;serve<\/strong>, que permite que voc&ecirc; implante sua aplica&ccedil;&atilde;o Laravel:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan serve<\/pre><p>Voc&ecirc; tamb&eacute;m pode gerenciar caches com o comando PHP artisan. Por exemplo, use o seguinte para limpar o seu cache de roteamento Laravel:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan route:clear<\/pre><h3 class=\"wp-block-heading\" id=\"h-middleware\"><strong>Middleware<\/strong><\/h3><p>Um&nbsp;<a href=\"https:\/\/laravel.com\/docs\/11.x\/middleware\" target=\"_blank\" rel=\"noopener\"><strong>middleware Laravel<\/strong><\/a>&nbsp;&eacute; um software intermedi&aacute;rio entre sua aplica&ccedil;&atilde;o e o cliente. Ele intercepta as solicita&ccedil;&otilde;es do usu&aacute;rio antes de chegarem ao seu servidor e costuma ser usado para filtrar e registrar o tr&aacute;fego. O Laravel fornece middlewares pr&eacute;-constru&iacute;dos, que voc&ecirc; pode usar diretamente na base de c&oacute;digo do seu aplicativo. Por padr&atilde;o, eles est&atilde;o localizados em&nbsp;<strong>app\/Http\/Middleware<\/strong>&nbsp;dentro do seu projeto. Para criar um novo middleware, execute o seguinte comando PHP Artisan:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan make:nome-do-middleware<\/pre><p>Ent&atilde;o, escreva seu script PHP para definir a l&oacute;gica de manipula&ccedil;&atilde;o. Depois de terminar, voc&ecirc; pode aplicar o middleware a uma rota espec&iacute;fica ou globalmente, interceptando todas as solicita&ccedil;&otilde;es e m&eacute;todos HTTP.<\/p><p>Para aplicar seu middleware globalmente, adicione-o &agrave; propriedade&nbsp;<strong>$middleware&nbsp;<\/strong>dentro de&nbsp;<strong>app\/Http\/Kernel.php<\/strong>. Ao trabalhar com v&aacute;rios servi&ccedil;os de middleware, voc&ecirc; pode agrup&aacute;-los para simplificar o roteamento. Para fazer isso, liste-os na propriedade&nbsp;<strong>$middlewareGroups<\/strong>&nbsp;dentro do arquivo&nbsp;<strong>Kernel.php<\/strong>. Considere este exemplo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">protected $middlewareGroups = [\n   'custom' =&gt; [\n       AppHttpMiddlewareEncryptCookies::class,\n       IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,\n]<\/pre><p>No trecho, o grupo&nbsp;<strong>custom&nbsp;<\/strong>cont&eacute;m dois componentes de middleware. Voc&ecirc; pode cham&aacute;-los simultaneamente em uma rota usando o nome do grupo, assim:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Route::get('\/example', function () {\n   return 'Esta rota usa o grupo de middleware personalizado.';\n})-&gt;middleware('custom');<\/pre><h3 class=\"wp-block-heading\" id=\"h-tratamento-de-erros-e-depuracao\"><strong>Tratamento de erros e depura&ccedil;&atilde;o<\/strong><\/h3><p>O Laravel vem com um mecanismo de tratamento de erros que ajuda voc&ecirc; a resolver problemas de forma mais flex&iacute;vel. Para configurar um manipulador de exce&ccedil;&otilde;es personalizado, adicione a l&oacute;gica dentro da classe&nbsp;<strong>AppExceptionsHandler<\/strong>.<\/p><p>Voc&ecirc; pode usar diferentes m&eacute;todos para modificar como o Laravel exibir&aacute; uma exce&ccedil;&atilde;o. Por exemplo, o seguinte c&oacute;digo usa&nbsp;<strong>&nbsp;render()<\/strong>&nbsp;para exibir erros espec&iacute;ficos como respostas HTTP:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public function render($request, Throwable $exception)\n{\n   if ($exception instanceof CustomException) {\n       return response()-&gt;view('errors.custom', [], 500);\n   }\n\n   return parent::render($request, $exception);\n}<\/pre><p>Outro m&eacute;todo &eacute; o&nbsp;<strong>report()<\/strong>, que modifica como o Laravel registra erros no diret&oacute;rio&nbsp;<strong>storage\/logs<\/strong>. Voc&ecirc; tamb&eacute;m pode criar uma classe de exce&ccedil;&atilde;o personalizada estendendo a classe base&nbsp;<strong>Exception<\/strong>, como neste c&oacute;digo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">namespace AppExceptions;\n\nuse Exception;\n\nclass CustomException extends Exception\n{\n   \/\/ L&oacute;gica ou propriedades personalizadas\n}<\/pre><p>Al&eacute;m de permitir que voc&ecirc; capture exce&ccedil;&otilde;es de forma mais eficiente, o Laravel fornece ferramentas para depurar erros. Por exemplo, o<strong>&nbsp;dd()&nbsp;<\/strong>e o<strong>dump()&nbsp;<\/strong>permitem que voc&ecirc; verifique os valores de uma vari&aacute;vel, permitindo que voc&ecirc; veja se a sa&iacute;da est&aacute; correta:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">dd($variable)<\/pre><p>Como alternativa, voc&ecirc; pode usar uma solu&ccedil;&atilde;o de terceiros, como o&nbsp;<strong>Laravel Debugbar<\/strong>, que fornece uma interface gr&aacute;fica no seu navegador que exibe informa&ccedil;&otilde;es &uacute;teis sobre sua aplica&ccedil;&atilde;o. Por exemplo, voc&ecirc; pode verificar suas rotas, consultas e solicita&ccedil;&otilde;es.<\/p><div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"1024\" height=\"207\" src=\"https:\/\/blog.hostinger.io\/br-tutoriais\/wp-content\/uploads\/sites\/53\/2024\/11\/laravel-debugbar-user-interface-1024x207.png\" alt=\"tutorial: laravel debugbar com interface gr&aacute;fica\" class=\"wp-image-47040\" srcset=\"https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-content\/uploads\/sites\/26\/2024\/11\/laravel-debugbar-user-interface.png 1024w, https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-content\/uploads\/sites\/26\/2024\/11\/laravel-debugbar-user-interface-300x61.png 300w, https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-content\/uploads\/sites\/26\/2024\/11\/laravel-debugbar-user-interface-150x30.png 150w, https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-content\/uploads\/sites\/26\/2024\/11\/laravel-debugbar-user-interface-768x155.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div><p>Voc&ecirc; pode instalar essa ferramenta via&nbsp;<strong>Composer<\/strong>. Se voc&ecirc; quer aprender mais sobre ele, confira o&nbsp;<a href=\"https:\/\/github.com\/barryvdh\/laravel-debugbar\" target=\"_blank\" rel=\"noopener\"><strong>reposit&oacute;rio GitHub do Laravel Debugbar<\/strong><\/a>.<\/p><h3 class=\"wp-block-heading\" id=\"h-construindo-apis-restful-com-laravel\"><strong>Construindo APIs RESTful com Laravel<\/strong><\/h3><p>A interface de programa&ccedil;&atilde;o de aplica&ccedil;&otilde;es&nbsp;<a href=\"https:\/\/aws.amazon.com\/pt\/what-is\/api\/\" target=\"_blank\" rel=\"noopener\"><strong>(API)<\/strong><\/a>&nbsp;RESTful permite que as aplica&ccedil;&otilde;es se comuniquem usando m&eacute;todos HTTP como&nbsp;<strong>GET<\/strong>,&nbsp;<strong>POST,<\/strong>&nbsp;e&nbsp;<strong>DELETE<\/strong>. Ele permite que voc&ecirc; integre servi&ccedil;os, compartilhe dados ou configure ferramentas de terceiros (como monitoramento) com mais facilidade.<\/p><p>O mecanismo robusto de roteamento e controle do Laravel torna-o adequado para o desenvolvimento de uma API RESTful. Saiba como:<\/p><ul class=\"wp-block-list\">\n<li>Abra o arquivo&nbsp;<strong>&nbsp;routes\/api.php<\/strong>. Ele vem com a sua instala&ccedil;&atilde;o do Laravel por padr&atilde;o.<\/li>\n\n\n\n<li>Defina a rota para cada endpoint da API especificando quais m&eacute;todos HTTP correspondem a uma a&ccedil;&atilde;o. Veja um exemplo:<\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">use AppHttpControllersItemController;\nRoute::get('\/items', [ItemController::class, 'index']);<\/pre><ul class=\"wp-block-list\">\n<li>Crie um controlador para lidar com as solicita&ccedil;&otilde;es de todos os endpoints:<\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan make:controller ItemController<\/pre><ul class=\"wp-block-list\">\n<li>Defina os m&eacute;todos que o&nbsp;<strong>ItemController<\/strong>&nbsp;usar&aacute; para lidar com a opera&ccedil;&atilde;o CRUD:<\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">namespace AppHttpControllers;\n\nuse IlluminateHttpRequest;\nuse AppModelsItem;\n\nclass ItemController extends Controller\n{\n   \/\/ GET \/items\n   public function index()\n   {\n       return Item::all();\n   }\n<\/pre><ul class=\"wp-block-list\">\n<li>Crie um modelo e um arquivo de migra&ccedil;&atilde;o de banco de dados para armazenar os dados do aplicativo para o recurso&nbsp;<strong>&nbsp;Item&nbsp;<\/strong>:<\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan make:model Item -m<\/pre><ul class=\"wp-block-list\">\n<li>Defina a estrutura da sua<strong>&nbsp;tabela de itens&nbsp;<\/strong>no banco de dados adicionando o seguinte c&oacute;digo:<\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public function up()\n{\n   Schema::create('items', function (Blueprint $table) {\n       $table-&gt;id();\n       $table-&gt;string('name');\n       $table-&gt;timestamps();\n   });\n}<\/pre><ul class=\"wp-block-list\">\n<li>Execute a migra&ccedil;&atilde;o para configurar a tabela do banco de dados:<\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan migrate<\/pre><p>Agora, verifique se o endpoint do API funciona corretamente enviando uma solicita&ccedil;&atilde;o&nbsp;<strong>GET<\/strong>&nbsp;usando&nbsp;<a href=\"\/pt\/tutoriais\/comando-curl-linux\"><strong>cURL<\/strong><\/a>&nbsp;ou&nbsp;<strong>Postman<\/strong>.<\/p><h2 class=\"wp-block-heading\" id=\"h-conclusao\"><strong>Conclus&atilde;o<\/strong><\/h2><p>O Laravel &eacute; um framework de desenvolvimento de aplicativos PHP full-stack que fornece v&aacute;rias ferramentas para simplificar o trabalho dos desenvolvedores web. Por exemplo, o template Blade permite que voc&ecirc; integre PHP ao HTML de maneira perfeita, enquanto o kit inicial Breeze simplifica a cria&ccedil;&atilde;o de sistemas de autentica&ccedil;&atilde;o.<\/p><p>Neste artigo, explicamos ferramentas e conceitos importantes no Laravel. Aqui est&aacute; um breve resumo:<\/p><ul class=\"wp-block-list\">\n<li><strong>PHP Artisan<\/strong>&nbsp;&ndash; ferramenta de linha de comando para criar e gerenciar componentes de aplicativos Laravel.<\/li>\n\n\n\n<li><strong>Rotas<\/strong>&nbsp;&ndash; um sistema que redireciona solicita&ccedil;&otilde;es de usu&aacute;rios para um controlador espec&iacute;fico com base na solicita&ccedil;&atilde;o HTTP para processamento.<\/li>\n\n\n\n<li><strong>Controlador<\/strong>&nbsp;&ndash; uma l&oacute;gica que lida com as opera&ccedil;&otilde;es CRUD com base nas solicita&ccedil;&otilde;es dos clientes.<\/li>\n\n\n\n<li><strong>Modelo&nbsp;<\/strong>&ndash; um m&eacute;todo que permite que os controladores interajam com esquemas de uma tabela de banco de dados espec&iacute;fica.<\/li>\n\n\n\n<li><strong>Visualiza&ccedil;&otilde;es<\/strong>&nbsp;&ndash; a interface de front-end do seu aplicativo, usada para receber entradas e mostrar sa&iacute;das.<\/li>\n<\/ul><p>Para se familiarizar com o Laravel, recomendamos criar um projeto do zero para praticar. Se voc&ecirc; usa algum plano VPS da Hostinger, pode pedir ajuda ao nosso Assistente com IA, o&nbsp;<a href=\"\/pt\/tutoriais\/como-configurar-vps#Usando_o_Kodee_para_Gerenciar_Seu_VPS_de_Forma_Eficiente\"><strong>Kodee<\/strong><\/a>, para garantir um processo de aprendizado tranquilo.<\/p><h2 class=\"wp-block-heading\" id=\"h-tutorial-laravel-perguntas-frequentes\"><strong>Tutorial Laravel: perguntas frequentes<\/strong><\/h2><p>Por fim, vamos responder algumas perguntas frequentes feitas por quem est&aacute; querendo adentrar no universo do Laravel.<\/p><div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-694410d793c11\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">O que &eacute; Laravel e qual a sua utilidade?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>O Laravel &eacute; um framework de desenvolvimento web PHP que oferece uma solu&ccedil;&atilde;o completa para o desenvolvimento de v&aacute;rios tipos de aplica&ccedil;&otilde;es. Por exemplo, voc&ecirc; pode desenvolver uma plataforma de com&eacute;rcio eletr&ocirc;nico ou uma interface de programa&ccedil;&atilde;o de aplicativos (API) RESTful. Por ser uma tecnologia full-stack, voc&ecirc; pode desenvolver tanto o front-end quanto o back-end do seu aplicativo usando o framework.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-694410d793c16\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Quais s&atilde;o as principais caracter&iacute;sticas do Laravel?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>As principais caracter&iacute;sticas do Laravel incluem o motor de template Blade, que permite incorporar PHP em componentes HTML; o PHP Artisan, que possibilita uma chamada de banco de dados orientada a objetos mais eficiente; e sintaxes de c&oacute;digo elegantes para agilizar o processo de desenvolvimento. Ele tamb&eacute;m usa a estrutura MVC, que ajuda os desenvolvedores a organizar os componentes do aplicativo com mais facilidade.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-694410d793c17\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">O Laravel &eacute; back-end ou front-end?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>O framework Laravel &eacute; full-stack e pode lidar com o back-end e o front-end. Com base em sua arquitetura MVC, voc&ecirc; pode desenvolver o back-end como as camadas de modelo e controlador, e o front-end como o componente de visualiza&ccedil;&atilde;o.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>O Laravel &eacute; um framework PHP de c&oacute;digo aberto muito conhecido por sua sintaxe amig&aacute;vel e sua comunidade ativa. Ele &eacute; bastante popular entre desenvolvedores PHP para a constru&ccedil;&atilde;o de v&aacute;rios tipos de aplica&ccedil;&otilde;es web, como lojas virtuais, plataformas de m&iacute;dia social e sistemas de gerenciamento de conte&uacute;do. Se voc&ecirc; n&atilde;o sabe bem por onde [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"\/pt\/tutoriais\/tutorial-laravel\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":356,"featured_media":49040,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"rank_math_title":"Tutorial Laravel: aprenda a criar aplica\u00e7\u00f5es eficientes e velozes","rank_math_description":"Aprenda a criar aplica\u00e7\u00f5es web eficientes com nosso tutorial Laravel. Descubra dicas pr\u00e1ticas e t\u00e9cnicas para otimizar seu desenvolvimento!","rank_math_focus_keyword":"tutorial laravel","footnotes":""},"categories":[4915],"tags":[7677],"class_list":["post-47037","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vps","tag-tutorial-laravel"],"hreflangs":[{"locale":"en-US","link":"https:\/\/www.hostinger.com\/tutorials\/laravel-tutorial","default":0},{"locale":"pt-BR","link":"https:\/\/www.hostinger.com\/br\/tutoriais\/tutorial-laravel","default":0},{"locale":"id-ID","link":"https:\/\/www.hostinger.com\/id\/tutorial\/cara-menggunakan-laravel","default":0},{"locale":"en-UK","link":"https:\/\/www.hostinger.com\/uk\/tutorials\/laravel-tutorial","default":0},{"locale":"en-MY","link":"https:\/\/www.hostinger.com\/my\/tutorials\/laravel-tutorial","default":0},{"locale":"en-PH","link":"https:\/\/www.hostinger.com\/ph\/tutorials\/laravel-tutorial","default":0},{"locale":"pt-PT","link":"https:\/\/www.hostinger.com\/pt\/tutoriais\/tutorial-laravel","default":0},{"locale":"en-IN","link":"https:\/\/www.hostinger.com\/in\/tutorials\/laravel-tutorial","default":0},{"locale":"en-CA","link":"https:\/\/www.hostinger.com\/ca\/tutorials\/laravel-tutorial","default":0},{"locale":"en-AU","link":"https:\/\/www.hostinger.com\/au\/tutorials\/laravel-tutorial","default":0},{"locale":"en-NG","link":"https:\/\/www.hostinger.com\/ng\/tutorials\/laravel-tutorial","default":0}],"acf":[],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-json\/wp\/v2\/posts\/47037","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-json\/wp\/v2\/users\/356"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-json\/wp\/v2\/comments?post=47037"}],"version-history":[{"count":5,"href":"https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-json\/wp\/v2\/posts\/47037\/revisions"}],"predecessor-version":[{"id":49039,"href":"https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-json\/wp\/v2\/posts\/47037\/revisions\/49039"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-json\/wp\/v2\/media\/49040"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-json\/wp\/v2\/media?parent=47037"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-json\/wp\/v2\/categories?post=47037"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/pt\/tutoriais\/wp-json\/wp\/v2\/tags?post=47037"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}