{"id":47037,"date":"2024-11-28T15:37:04","date_gmt":"2024-11-28T18:37:04","guid":{"rendered":"\/tutoriais\/?p=47037"},"modified":"2025-12-18T11:33:59","modified_gmt":"2025-12-18T14:33:59","slug":"tutorial-laravel","status":"publish","type":"post","link":"\/br\/tutoriais\/tutorial-laravel\/","title":{"rendered":"Tutorial Laravel: tudo o que voc\u00ea precisa saber para come\u00e7ar com o framework"},"content":{"rendered":"<p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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\n\n\n<\/p><h2 class=\"wp-block-heading\" id=\"h-comecando-com-laravel\"><strong>Come&ccedil;ando com Laravel<\/strong><\/h2><p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">Em termos de sistema operacional, voc&ecirc; pode&nbsp;<a href=\"\/br\/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=\"\/br\/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=\"\/br\/servidor-vps\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/53\/2023\/02\/BR-VPS-hosting_in-text-banner-1.png\/w=1024,h=1024,fit=scale-down\" alt=\"\" class=\"wp-image-32923\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/53\/2023\/02\/BR-VPS-hosting_in-text-banner-1.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/53\/2023\/02\/BR-VPS-hosting_in-text-banner-1.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/53\/2023\/02\/BR-VPS-hosting_in-text-banner-1.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/53\/2023\/02\/BR-VPS-hosting_in-text-banner-1.png\/w=768,fit=scale-down 768w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/53\/2023\/02\/BR-VPS-hosting_in-text-banner-1.png\/w=1536,fit=scale-down 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><p class=\"wp-block-paragraph\">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=\"\/br\/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>\n\n\n<div class=\"announcement-block announcement-block--important\">\n            <span class=\"announcement-block__heading\">\n                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n                          d=\"M12 22.5C17.799 22.5 22.5 17.799 22.5 12C22.5 6.20101 17.799 1.5 12 1.5C6.20101 1.5 1.5 6.20101 1.5 12C1.5 17.799 6.20101 22.5 12 22.5ZM13.637 7.65198C13.637 6.74791 12.9041 6.01501 12 6.01501C11.0959 6.01501 10.363 6.74791 10.363 7.65198C10.5335 9.53749 10.875 13.383 10.875 13.383C10.875 14.0043 11.3787 14.508 12 14.508C12.6213 14.508 13.125 14.0043 13.125 13.383V13.38L13.637 7.65198ZM11.9927 15.714C11.3714 15.714 10.8677 16.2177 10.8677 16.839C10.8677 17.4603 11.3714 17.964 11.9927 17.964H12.0073C12.6286 17.964 13.1323 17.4603 13.1323 16.839C13.1323 16.2177 12.6286 15.714 12.0073 15.714H11.9927Z\"\n                          fill=\"#FEA419\"\/>\n                <\/svg>\n                Important\n            <\/span>\n            <p class=\"announcement-block__content\">\n                <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>.\n            <\/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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\"><strong>Componentes de modelo<\/strong><\/p><p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\"><strong>Componentes de visualiza&ccedil;&atilde;o<\/strong><\/p><p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\"><strong>Componentes do controlador<\/strong><\/p><p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 Illuminate\\Support\\Facades\\Route;<\/pre><p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 App\\Http\\Controllers\\HomeController;\n\nRoute::get('\/home', [HomeController::class, 'index']);<\/pre><p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 App\\Http\\Controllers;\nuse App\\Models\\Product;\nuse Illuminate\\Http\\Request;\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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\"><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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\"><strong>Autentica&ccedil;&atilde;o Laravel<\/strong><\/p><p class=\"wp-block-paragraph\">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; App\\Models\\User::class,\n   ],\n],<\/pre><p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\"><strong>Autoriza&ccedil;&atilde;o Laravel<\/strong><\/p><p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 App\\Models\\Post;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Gate;\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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 App\\Providers;\nuse App\\Models\\Post;\nuse App\\Policies\\PostPolicy;\nuse Illuminate\\Foundation\\Support\\Providers\\AuthServiceProvider as ServiceProvider;\nuse Illuminate\\Support\\Facades\\Gate;\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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 App\\Http\\Controllers\\FormController;\n\nRoute::get('\/form', [FormController::class, 'show'])-&gt;name('form.show');\nRoute::post('\/form-submit', [FormController::class, 'submit'])-&gt;name('form.submit');<\/pre><p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 App\\Http\\Controllers;\nuse Illuminate\\Http\\Request;\nuse App\\Models\\User; \/\/ 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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\"><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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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       \\App\\Http\\Middleware\\EncryptCookies::class,\n       \\Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse::class,\n]<\/pre><p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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>App\\Exceptions\\Handler<\/strong>.<\/p><p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 App\\Exceptions;\n\nuse Exception;\n\nclass CustomException extends Exception\n{\n   \/\/ L&oacute;gica ou propriedades personalizadas\n}<\/pre><p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"1024\" height=\"207\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/53\/2024\/11\/laravel-debugbar-user-interface.png\/w=1024,h=1024,fit=scale-down\" alt=\"tutorial: laravel debugbar com interface gr&aacute;fica\" class=\"wp-image-47040\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/53\/2024\/11\/laravel-debugbar-user-interface.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/53\/2024\/11\/laravel-debugbar-user-interface.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/53\/2024\/11\/laravel-debugbar-user-interface.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/53\/2024\/11\/laravel-debugbar-user-interface.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div><p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 App\\Http\\Controllers\\ItemController;\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 App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\nuse App\\Models\\Item;\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 class=\"wp-block-paragraph\">Agora, verifique se o endpoint do API funciona corretamente enviando uma solicita&ccedil;&atilde;o&nbsp;<strong>GET<\/strong>&nbsp;usando&nbsp;<a href=\"\/br\/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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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=\"\/br\/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 class=\"wp-block-paragraph\">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 \"><strong>O que &eacute; Laravel e qual a sua utilidade?<\/strong><\/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 \"><strong>Quais s&atilde;o as principais caracter&iacute;sticas do Laravel?<\/strong><\/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 \"><strong>O Laravel &eacute; back-end ou front-end?<\/strong><\/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=\"\/br\/tutoriais\/tutorial-laravel\/\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":356,"featured_media":40733,"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":1},{"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-PH","link":"https:\/\/www.hostinger.com\/ph\/tutorials\/laravel-tutorial\/","default":0},{"locale":"en-MY","link":"https:\/\/www.hostinger.com\/my\/tutorials\/laravel-tutorial\/","default":0},{"locale":"en-GB","link":"https:\/\/www.hostinger.com\/uk\/tutorials\/laravel-tutorial\/","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},{"locale":"pt-PT","link":"https:\/\/www.hostinger.com\/pt\/tutoriais\/tutorial-laravel\/","default":0}],"acf":[],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/posts\/47037","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/users\/356"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/comments?post=47037"}],"version-history":[{"count":5,"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/posts\/47037\/revisions"}],"predecessor-version":[{"id":51547,"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/posts\/47037\/revisions\/51547"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/media\/40733"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/media?parent=47037"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/categories?post=47037"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/br\/tutoriais\/wp-json\/wp\/v2\/tags?post=47037"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}