{"id":61770,"date":"2023-11-13T04:26:34","date_gmt":"2023-11-13T07:26:34","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=61770&#038;preview=true&#038;preview_id=61770"},"modified":"2023-11-14T06:21:29","modified_gmt":"2023-11-14T09:21:29","slug":"blog-laravel","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/","title":{"rendered":"Como Criar um Blog no Laravel"},"content":{"rendered":"<p>O <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-laravel\/\">Laravel<\/a> \u00e9 um framework de aplicativos web em PHP com uma sintaxe expressiva e elegante. Possui uma vasta biblioteca de pacotes e gerencia grande parte do trabalho ma\u00e7ante na programa\u00e7\u00e3o, permitindo que voc\u00ea se concentre na criatividade.<\/p>\n<p>E um uso criativo para o Laravel \u00e9 a constru\u00e7\u00e3o de um blog pessoal. Este tutorial descreve como usar o Laravel para construir e publicar um blog na Kinsta.<\/p>\n<p>Para uma visualiza\u00e7\u00e3o pr\u00e9via do projeto, confira o <a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-laravel-blog\" target=\"_blank\" rel=\"noopener noreferrer\">c\u00f3digo completo do projeto<\/a>.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Pr\u00e9-requisitos<\/h2>\n<p>Para seguir este tutorial, ser\u00e1 necess\u00e1rio:<\/p>\n<ul>\n<li>Um servidor de internet. Este tutorial usa o <a href=\"https:\/\/www.apachefriends.org\/download.htmlss.html\" target=\"_blank\" rel=\"noopener noreferrer\">XAMPP<\/a>.<\/li>\n<li>Uma conta no GitHub, GitLab ou Bitbucket para publicar o c\u00f3digo do seu aplicativo.<\/li>\n<li>O <a href=\"https:\/\/laravel.com\/docs\/7.x\/installation\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel instalado<\/a>.<\/li>\n<li>Uma conta MyKinsta ativa para hospedagem de aplicativos. <a href=\"https:\/\/kinsta.com\/pt\/inscreva-se\/?product_type=app-db\">Inscreva-se para uma avalia\u00e7\u00e3o gratuita<\/a>, caso voc\u00ea ainda n\u00e3o tenha uma.<\/li>\n<\/ul>\n<p>Certifique-se de que os servi\u00e7os de m\u00f3dulo <strong>Apache <\/strong>e <strong>MySQL <\/strong>estejam em execu\u00e7\u00e3o no Painel de Controle do XAMPP. Caso contr\u00e1rio, clique no bot\u00e3o <strong>Start<\/strong> de cada servi\u00e7o na coluna <strong>Actions<\/strong>. Seu painel de controle XAMPP deve ser parecido com este:<\/p>\n<figure style=\"width: 1089px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/xampp-control-panel-apache-mysql.png\" alt=\"O painel de controle do XAMPP.\" width=\"1089\" height=\"448\"><figcaption class=\"wp-caption-text\">O painel de controle do XAMPP.<\/figcaption><\/figure>\n<p>Por padr\u00e3o, MySQL\/MariaDB \u00e9 executado na porta 3306. Anote a porta caso voc\u00ea a altere.<\/p>\n<p>Caso esteja utilizando um servidor web diferente do XAMPP, certifique-se de que est\u00e1 executando o <a href=\"https:\/\/httpd.apache.org\/download.cgi\" target=\"_blank\" rel=\"noopener noreferrer\">Apache<\/a> ou outro software de servidor e o <a href=\"https:\/\/mariadb.org\/download\/\" target=\"_blank\" rel=\"noopener noreferrer\">servidor MariaDB<\/a> est\u00e1 instalado em sua m\u00e1quina local.<\/p>\n<h3>In\u00edcio r\u00e1pido com o phpMyAdmin<\/h3>\n<ol start=\"1\">\n<li>Com o MySQL e o Apache em execu\u00e7\u00e3o, abra seu navegador.<\/li>\n<li>Acesse o phpMyAdmin e cole <code>http:\/\/localhost\/phpmyadmin\/<\/code>. Ele dever\u00e1 exibir o seguinte:<\/li>\n<\/ol>\n<figure style=\"width: 1359px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/phpmyadmin-apache-mysql.png\" alt=\"O phpMyAdmin aberto no navegador.\" width=\"1359\" height=\"397\"><figcaption class=\"wp-caption-text\">O phpMyAdmin aberto no navegador.<\/figcaption><\/figure>\n<p>O phpMyAdmin \u00e9 uma ferramenta de gerenciamento de banco de dados para MySQL e MariaDB.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Voc\u00ea pode usar qualquer sistema de gerenciamento de banco de dados, mas este tutorial usa o MariaDB, que tem uma conex\u00e3o com o Laravel semelhante \u00e0 do MySQL. A configura\u00e7\u00e3o do Laravel \u00e9 a mesma em ambos os bancos de dados.<\/p>\n<\/aside>\n\n<h2>Criando um novo projeto Laravel<\/h2>\n<p>Agora voc\u00ea pode come\u00e7ar a criar o blog usando o Laravel. Para este tutorial, usamos um computador com Windows.<\/p>\n<ol start=\"1\">\n<li>Acesse o terminal ou a interface de linha de comando (CLI) da sua m\u00e1quina.<\/li>\n<li>Crie um projeto Laravel chamado <strong>blog<\/strong> usando o comando <code>laravel new blog<\/code>.<\/li>\n<li>Abra o diret\u00f3rio <strong>blog<\/strong> do seu projeto com o comando <code>cd blog<\/code>.<\/li>\n<li>Em seguida, abra o diret\u00f3rio em seu editor de c\u00f3digo.<\/li>\n<li>Para verificar se voc\u00ea criou o projeto com \u00eaxito, execute <code>php artisan serve<\/code> no terminal ou CMD.<\/li>\n<li>Clique no endere\u00e7o local exibido para servi-lo ao navegador. O navegador deve exibir a p\u00e1gina padr\u00e3o de boas-vindas do Laravel, conforme exibida abaixo:<\/li>\n<\/ol>\n<figure style=\"width: 1279px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-welcome.png\" alt=\"A p\u00e1gina de boas-vindas do Laravel.\" width=\"1279\" height=\"801\"><figcaption class=\"wp-caption-text\">A p\u00e1gina de boas-vindas do Laravel.<\/figcaption><\/figure>\n<h3>Configure o banco de dados<\/h3>\n<p>Crie e configure o banco de dados retornando ao <strong>phpMyAdmin<\/strong> em seu navegador e criando um banco de dados chamado <strong>blog<\/strong>.<\/p>\n<ol start=\"1\">\n<li>Para criar o banco de dados, acesse a aba <strong>Databases<\/strong> e digite &#8220;blog&#8221; no campo <strong>Create database<\/strong>.<\/li>\n<li>Em seguida, clique em <strong>Create<\/strong>.<\/li>\n<\/ol>\n<figure style=\"width: 1042px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/phpmyadmin-create-database.png\" alt=\"Cria\u00e7\u00e3o de um banco de dados no painel do phpMyAdmin.\" width=\"1042\" height=\"312\"><figcaption class=\"wp-caption-text\">Cria\u00e7\u00e3o de um banco de dados no painel do phpMyAdmin.<\/figcaption><\/figure>\n<ol start=\"3\">\n<li>Em seguida, atualize a conex\u00e3o do banco de dados no arquivo <strong>.env<\/strong> na raiz do projeto do blog. Altere <code>DB_DATABASE<\/code> e <code>DB_PASSWORD<\/code> para os valores que voc\u00ea criou.<\/li>\n<\/ol>\n<p>Os detalhes da conex\u00e3o devem ficar parecidos com estes:<\/p>\n<pre><code class=\"language-markdown\">DB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=blog\nDB_USERNAME=your-db-username\nDB_PASSWORD=your-db-password<\/code><\/pre>\n<p>Os outros detalhes de conex\u00e3o do banco de dados permanecem os mesmos do arquivo <strong>.env<\/strong>. Caso voc\u00ea altere qualquer valor de conex\u00e3o, como, por exemplo, <code>DB_PORT<\/code> de 3306 para 3307 durante a configura\u00e7\u00e3o, certifique-se de atualiz\u00e1-lo no arquivo <strong>.env<\/strong>.<\/p>\n<h3>Crie a tabela posts<\/h3>\n<p>Em seguida, crie um modelo do banco de dados e migre as altera\u00e7\u00f5es.<\/p>\n<ol start=\"1\">\n<li>Em seu terminal, execute <code>php artisan make:model Post -mc<\/code> para criar um modelo chamado <strong>Post<\/strong>, uma tabela chamada <strong>posts<\/strong>, um arquivo de migra\u00e7\u00e3o e um controlador.<\/li>\n<\/ol>\n<figure style=\"width: 1154px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/terminal-php-artisan-make-model.png\" alt=\"Criando um modelo, um arquivo de migra\u00e7\u00e3o e um controlador por meio da linha de comando.\" width=\"1154\" height=\"140\"><figcaption class=\"wp-caption-text\">Criando um modelo, um arquivo de migra\u00e7\u00e3o e um controlador por meio da linha de comando.<\/figcaption><\/figure>\n<ol start=\"2\">\n<li>Verifique o diret\u00f3rio <strong>database\/migrations<\/strong> e abra o arquivo de migra\u00e7\u00e3o que voc\u00ea acabou de criar. Ele tem o seguinte formato: <code>YYYY_MM_DD_ID_create_posts_table.php<\/code>.<\/li>\n<li>No m\u00e9todo <code>up()<\/code> do arquivo de migra\u00e7\u00e3o, crie um schema com os atributos <code>title<\/code>, <code>description<\/code> e <code>image<\/code>.<\/li>\n<\/ol>\n<pre><code class=\"language-php\">public function up() {\n  Schema::create('posts', function (Blueprint $table) {\n    $table-&gt;id();\n    $table-&gt;string('title')-&gt;nullable();\n    $table-&gt;text('description')-&gt;nullable();\n    $table-&gt;string('image')-&gt;nullable();\n    $table-&gt;timestamps();\n  });\n}<\/code><\/pre>\n<ol start=\"4\">\n<li>Agora v\u00e1 at\u00e9 o terminal e migre as altera\u00e7\u00f5es usando <code>php artisan migrate<\/code>, conforme mostrado abaixo:<\/li>\n<\/ol>\n<figure style=\"width: 1200px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/terminal-php-artisan-migrate.png\" alt=\"Migra\u00e7\u00e3o do banco de dados do Laravel.\" width=\"1200\" height=\"224\"><figcaption class=\"wp-caption-text\">Migra\u00e7\u00e3o do banco de dados do Laravel.<\/figcaption><\/figure>\n<ol start=\"5\">\n<li>Acesse o <strong>phpMyAdmin<\/strong> em seu navegador, onde voc\u00ea ver\u00e1 a tabela <strong>posts<\/strong>:<\/li>\n<\/ol>\n<figure style=\"width: 990px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/phpmyadmin-posts-table.png\" alt=\"A tabela migrada posts \u00e9 exibida no phpMyAdmin.\" width=\"990\" height=\"315\"><figcaption class=\"wp-caption-text\">A tabela migrada posts \u00e9 exibida no phpMyAdmin.<\/figcaption><\/figure>\n<h3>Como criar controladores<\/h3>\n<p>Adicionar visualiza\u00e7\u00f5es e controladores implementa sua l\u00f3gica de neg\u00f3cios no conjunto do banco de dados. As visualiza\u00e7\u00f5es s\u00e3o as interfaces de usu\u00e1rio que exibem os objetos de dados do modelo. Os controladores gerenciam o fluxo de execu\u00e7\u00e3o dos dados entre o modelo e as visualiza\u00e7\u00f5es.<\/p>\n<ol start=\"1\">\n<li>Antes de criar os arquivos Blade, execute <code>npm install<\/code>, seguido de <code>npm run dev<\/code> no seu terminal. O primeiro comando instala os pacotes npm necess\u00e1rios. O segundo inicia um servidor de desenvolvimento do Vite.<\/li>\n<li>V\u00e1 at\u00e9 o\u00a0diret\u00f3rio <strong>app\/Http\/Controllers<\/strong>, abra o arquivo <strong>PostController.php<\/strong> e crie um m\u00e9todo controlador <code>index<\/code>. O m\u00e9todo controlador renderiza um texto simples no navegador. Para fazer isso, adicione o seguinte c\u00f3digo \u00e0\u00a0classe <code>PostController<\/code>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">public function index() {\n  $post = \"Laravel Tutorial Series One!\";\n  return view('posts.index', ['post'=&gt;$post]);\n}<\/code><\/pre>\n<p>Esse m\u00e9todo passa <code>$post<\/code> como uma vari\u00e1vel de contexto para a se\u00e7\u00e3o <code>views<\/code> do template index do Blade. <code>$post<\/code> cont\u00e9m texto para ser exibido, que neste caso \u00e9 &#8220;Laravel Tutorial Series One!&#8221;. Voc\u00ea substituir\u00e1 isso com o loop das publica\u00e7\u00f5es mais tarde.<\/p>\n<ol start=\"3\">\n<li>No diret\u00f3rio<strong> resources\/views<\/strong>, crie dois novos diret\u00f3rios: <strong>layouts <\/strong>e <strong>posts<\/strong>.<\/li>\n<li>No diret\u00f3rio <strong>layouts<\/strong>, crie um arquivo <strong>app.blade.php<\/strong>. Outros arquivos Blade herdar\u00e3o deste.<\/li>\n<li>Copie este c\u00f3digo em <strong>app.blade.php<\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"{{ str_replace('_', '-', app()-&gt;getLocale()) }}\"&gt;\n\n&lt;head&gt;\n  &lt;meta charset=\"utf-8\"&gt;\n  &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\n  &lt;title&gt;Blog&lt;\/title&gt;\n  &lt;!-- Styles \u2192\n  &lt;link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.2.3\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65\" crossorigin=\"anonymous\"&gt;\n  @vite(['resources\/css\/app.css', 'resources\/js\/app.js'])\n&lt;\/head&gt;\n\n&lt;!-- Navbar \u2192\n&lt;header&gt;\n  &lt;nav class=\"navbar bg-primary\"&gt;\n    &lt;div class=\"container-fluid\"&gt;\n      &lt;a class=\"navbar-brand\" href=\"{{ route('posts.index') }}\"&gt;Mini-Blog&lt;\/a&gt;\n    &lt;\/div&gt;\n  &lt;\/nav&gt;\n&lt;\/header&gt;\n\n&lt;!-- Body --&gt;\n&lt;body&gt;\n  @yield('content')\n&lt;\/body&gt;\n\n&lt;!-- Footer --&gt;\n&lt;footer class=\"footer mt-auto py-3 bg-dark\"&gt;\n  &lt;div class=\"container d-lg-flex justify-content-between\"&gt;\n    &lt;span class=\"text-light\"&gt;Mini-Blog \u00a9 2023&lt;\/span&gt;\n  &lt;\/div&gt;\n&lt;\/footer&gt;\n\n&lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/sweetalert2@11\"&gt;&lt;\/script&gt;\n&lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.2.3\/dist\/js\/bootstrap.bundle.min.js\"  integrity=\"sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK\/7HAuoJl+0I4\" crossorigin=\"anonymous\"&gt;&lt;\/script&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>Ao empregar este c\u00f3digo HTML, voc\u00ea est\u00e1 importando a vers\u00e3o 5.2.3 do Bootstrap e o Vite para agrupar os recursos de JavaScript e CSS. A p\u00e1gina gerada tem um cabe\u00e7alho com uma barra de navega\u00e7\u00e3o e um rodap\u00e9 com os scripts chamados embaixo. No corpo da p\u00e1gina, o conte\u00fado din\u00e2mico \u00e9 renderizado a partir de outros arquivos Blade com o aux\u00edlio da diretiva <code>@yield('content')<\/code>.<\/p>\n<p>O diret\u00f3rio <strong>posts <\/strong>cont\u00e9m os arquivos do Blade para implementar opera\u00e7\u00f5es de cria\u00e7\u00e3o e leitura.<\/p>\n<ol start=\"6\">\n<li>No diret\u00f3rio <strong>posts,<\/strong>\u00a0crie um arquivo Blade chamado <strong>index.blade.php<\/strong> e adicione o seguinte c\u00f3digo:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">@extends('layouts.app')\n@section('content')\n&lt;div class=\"container\"&gt;\n  &lt;div class=\"titlebar\"&gt;\n    &lt;h1&gt;Blog list&lt;\/h1&gt;\n  &lt;\/div&gt;\n  &lt;hr&gt;\n  &lt;p&gt;The Blog 1 - {{ $post }}&lt;\/p&gt;\n&lt;\/div&gt;\n@endsection<\/code><\/pre>\n<p>Esse c\u00f3digo se estende do arquivo <strong>app.blade.php<\/strong> na p\u00e1gina de layouts. Quando \u00e9 renderizado no navegador, ele exibe o conte\u00fado de cada publica\u00e7\u00e3o do blog, juntamente com a barra de navega\u00e7\u00e3o e o rodap\u00e9 herdados do arquivo <strong>app.blade.php<\/strong> na pasta <strong>layouts<\/strong>. Entre as tags de se\u00e7\u00e3o, o conte\u00fado do controlador \u00e9 passado para ser renderizado no navegador quando o aplicativo \u00e9 executado.<\/p>\n<ol start=\"7\">\n<li>Defina a rota no diret\u00f3rio <strong>routes<\/strong>. A defini\u00e7\u00e3o da rota permite o carregamento autom\u00e1tico pelo <code>RouteServiceProvider<\/code> no diret\u00f3rio <strong>App\/Providers<\/strong>. O <code>RouteServiceProvider<\/code> \u00e9 a classe respons\u00e1vel pelo carregamento dos arquivos de rota do aplicativo.<\/li>\n<li>No arquivo <strong>routes\/web.php<\/strong>, importe<strong>\u00a0PostController <\/strong>usando <code>use AppHttpControllersPostController<\/code>.<\/li>\n<li>Ent\u00e3o defina a rota adicionando <code>Route::resource('posts', PostController::class);<\/code> ao arquivo <strong>routes\/web.php<\/strong>.<\/li>\n<li>Com o servidor de desenvolvimento do Vite ainda em execu\u00e7\u00e3o, use <code>php artisan serve<\/code> para executar o aplicativo em seu terminal.<\/li>\n<li>Com seu navegador, abra <code>http:\/\/127.0.0.1:8000\/posts<\/code> para ver a nova lista de artigos do blog.<\/li>\n<\/ol>\n<p>Essa p\u00e1gina deve se parecer assim:<\/p>\n<figure style=\"width: 1280px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-blog-list-preview.png\" alt=\"O aplicativo de blog exibido no navegador.\" width=\"1280\" height=\"267\"><figcaption class=\"wp-caption-text\">O aplicativo de blog exibido no navegador.<\/figcaption><\/figure>\n<p>Na pr\u00f3xima se\u00e7\u00e3o, definiremos os m\u00e9todos do controlador para exibir todas os artigos, criar uma publica\u00e7\u00e3o e armazenar uma publica\u00e7\u00e3o. Em seguida, vamos adicionar suas rotas e criar os arquivos Blade nas se\u00e7\u00f5es correspondentes.<\/p>\n<h2>Crie a p\u00e1gina de artigos do blog<\/h2>\n<p>Crie artigos de blog inserindo um t\u00edtulo, adicionando uma descri\u00e7\u00e3o e carregando uma imagem. Em seguida, exiba seus artigos\u00a0em ordem sequencial.<\/p>\n<ol start=\"1\">\n<li>No diret\u00f3rio <strong>app\/Models<\/strong>, abra o arquivo <strong>Post.php<\/strong>.<\/li>\n<li>Na classe <code>Post<\/code>\u00a0abaixo do bloco de c\u00f3digo <code>use HasFactory;<\/code>, adicione <code>protected $fillable = ['title', 'description', 'image'];<\/code>.<\/li>\n<\/ol>\n<p>Esse c\u00f3digo protege os atributos do seu modelo contra atribui\u00e7\u00f5es em massa.<\/p>\n<ol start=\"3\">\n<li>No arquivo <strong>app\/Http\/Controllers\/PostController.php<\/strong>, importe o modelo <code>Post<\/code> usando <code>use AppModelsPost;<\/code>.<\/li>\n<li>Substitua os m\u00e9todos de controle <code>index<\/code> e <code>create<\/code> criados anteriormente na classe <code>PostController<\/code> pelo c\u00f3digo abaixo:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">\/\/ Show all posts\npublic function index() {\n  $posts = Post::orderBy('created_at', 'desc')-&gt;get();\n  return view('posts.index', ['posts' =&gt; $posts]);\n}\n    \n\/\/ Create post\npublic function create() {\n  return view('posts.create');\n}<\/code><\/pre>\n<p>No m\u00e9todo <code>index<\/code> que voc\u00ea acabou de criar, o aplicativo PHP busca todos os artigos, coloca-as em ordem cronol\u00f3gica e as armazena na vari\u00e1vel <code>posts<\/code>. Na visualiza\u00e7\u00e3o de retorno, os artigos\u00a0passam para o arquivo <strong>index.blade.php<\/strong> como uma vari\u00e1vel de contexto no diret\u00f3rio <strong>views\/posts<\/strong>. O m\u00e9todo <code>create<\/code> retorna um arquivo <strong>create.blade.php<\/strong> e o coloca no diret\u00f3rio <strong>views\/posts<\/strong> se um usu\u00e1rio tentar fazer uma nova publica\u00e7\u00e3o.<\/p>\n<ol start=\"5\">\n<li>Crie um m\u00e9todo controlador <code>store<\/code> usando o c\u00f3digo abaixo (para armazenar os artigos do blog no banco de dados). Adicione esse c\u00f3digo \u00e0 classe <code>PostController<\/code> abaixo dos m\u00e9todos de controle <code>index<\/code> e <code>create<\/code>.<\/li>\n<\/ol>\n<pre><code class=\"language-php\">\/\/ Store post\npublic function store(Request $request) {\n  \/\/ validations\n  $request-&gt;validate([\n    'title' =&gt; 'required',\n    'description' =&gt; 'required',\n    'image' =&gt; 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',\n  ]);\n\n  $post = new Post;\n\n  $file_name = time() . '.' . request()-&gt;image-&gt;getClientOriginalExtension();\n  request()-&gt;image-&gt;move(public_path('images'), $file_name);\n\n  $post-&gt;title = $request-&gt;title;\n  $post-&gt;description = $request-&gt;description;\n  $post-&gt;image = $file_name;\n\n  $post-&gt;save();\n  return redirect()-&gt;route('posts.index')-&gt;with('success', 'Post created successfully.');\n}<\/code><\/pre>\n<p>O m\u00e9todo <code>store<\/code> gerencia as solicita\u00e7\u00f5es do cliente relacionadas aos dados em seu corpo, de modo que ele recebe <code>request<\/code> como argumento. Em seguida, voc\u00ea valida os campos usados ao criar uma publica\u00e7\u00e3o e gera uma inst\u00e2ncia <code>post<\/code> a partir do modelo <code>Post<\/code>. Da\u00ed os dados de campo inseridos s\u00e3o atribu\u00eddos \u00e0 inst\u00e2ncia criada e salvos. A p\u00e1gina \u00e9 redirecionada para a visualiza\u00e7\u00e3o <code>index<\/code> com um flash de texto que diz: \u201cPost created successfully.\u201d (&#8220;Publica\u00e7\u00e3o criada com sucesso.&#8221;).<\/p>\n<h3>Adicione rotas \u00e0s suas publica\u00e7\u00f5es<\/h3>\n<p>Para registrar as rotas no arquivo <strong>web.php<\/strong>:<\/p>\n<ol start=\"1\">\n<li>No diret\u00f3rio <strong>routes<\/strong> na raiz do seu projeto, abra o arquivo <strong>web.php<\/strong>.<\/li>\n<li>Registre as rotas dos m\u00e9todos do controlador substituindo o c\u00f3digo existente por este:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">&lt;?php\n\nuse Illuminate\\Support\\Facades\\Route;\nuse App\\Http\\Controllers\\PostController;\n\nRoute::resource('\/', PostController::class)-&gt;names([\n  'index' =&gt; 'posts.index',\n  'create' =&gt; 'posts.create',\n  'store' =&gt; 'posts.store',\n  'show' =&gt; 'posts.show',\n]);<\/code><\/pre>\n<p>Esse controlador usa essas rotas para criar, armazenar e exibir seus objetos de dados.<\/p>\n<h3>Crie arquivos Blade<\/h3>\n<p>Para criar as visualiza\u00e7\u00f5es, retorne \u00e0 classe <code>PostController<\/code>:<\/p>\n<ol start=\"1\">\n<li>No diret\u00f3rio <strong>resources\/views\/posts<\/strong>, crie um arquivo Blade chamado <strong>create.blade.php<\/strong> e adicione o c\u00f3digo abaixo:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">@extends('layouts.app')\n@section('content')\n&lt;div class=\"container\"&gt;\n  &lt;h1&gt;Add Post&lt;\/h1&gt;\n  &lt;section class=\"mt-3\"&gt;\n    &lt;form method=\"post\" action=\"{{ route('posts.store') }}\" enctype=\"multipart\/form-data\"&gt;\n      @csrf\n      &lt;!-- Error message when data is not inputted --&gt;\n      @if ($errors-&gt;any())\n        &lt;div class=\"alert alert-danger\"&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      &lt;div class=\"card p-3\"&gt;\n        &lt;label for=\"floatingInput\"&gt;Title&lt;\/label&gt;\n        &lt;input class=\"form-control\" type=\"text\" name=\"title\"&gt;\n        &lt;label for=\"floatingTextArea\"&gt;Description&lt;\/label&gt;\n        &lt;textarea class=\"form-control\" name=\"description\" id=\"floatingTextarea\" cols=\"30\" rows=\"10\"&gt;&lt;\/textarea&gt;\n        &lt;label for=\"formFile\" class=\"form-label\"&gt;Add Image&lt;\/label&gt;\n        &lt;img src=\"\" alt=\"\" class=\"img-blog\"&gt;\n        &lt;input class=\"form-control\" type=\"file\" name=\"image\"&gt;\n      &lt;\/div&gt;\n      &lt;button class=\"btn btn-secondary m-3\"&gt;Save&lt;\/button&gt;\n    &lt;\/form&gt;\n  &lt;\/section&gt;\n    \n&lt;\/div&gt;\n@endsection<\/code><\/pre>\n<p>Nesse c\u00f3digo, o <strong>create.blade.php<\/strong> herda o conte\u00fado do <strong>app.blade.php<\/strong> no diret\u00f3rio <strong>layouts<\/strong> usando <code>@extends('layouts.app')<\/code>. Esse conte\u00fado inclui um cabe\u00e7alho, uma barra de navega\u00e7\u00e3o e um rodap\u00e9. Ap\u00f3s adicionar o texto <code>Add Post<\/code> na tag <code>h1<\/code>, voc\u00ea criou um formul\u00e1rio com o m\u00e9todo <code>post<\/code> que cont\u00e9m a a\u00e7\u00e3o <code>{{route('posts.store')}}<\/code>.<\/p>\n<p>O c\u00f3digo <code>enctype=\"multipart\/form-data\"<\/code> permite o upload de imagens, e o <code>csrf<\/code> protege o formul\u00e1rio de ataques cross-site. Em seguida, as mensagens de erro exibem entradas de campo inv\u00e1lidas e usam <code>field attributes<\/code> para criar etiquetas e entradas para o formul\u00e1rio.<\/p>\n<ol start=\"2\">\n<li>Agora, substitua o c\u00f3digo no arquivo <strong>index.blade.php<\/strong> pelo c\u00f3digo abaixo para exibir todas as publica\u00e7\u00f5es do blog:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">@extends('layouts.app')\n@section('content')\n&lt;div class=\"container\"&gt;\n  &lt;div class=\"titlebar\"&gt;\n    &lt;a class=\"btn btn-secondary float-end mt-3\" href=\"{{ route('posts.create') }}\" role=\"button\"&gt;Add Post&lt;\/a&gt;\n    &lt;h1&gt;Mini post list&lt;\/h1&gt;\n  &lt;\/div&gt;\n    \n  &lt;hr&gt;\n  &lt;!-- Message if a post is posted successfully --&gt;\n  @if ($message = Session::get('success'))\n  &lt;div class=\"alert alert-success\"&gt;\n    &lt;p&gt;{{ $message }}&lt;\/p&gt;\n  &lt;\/div&gt;\n  @endif\n         @if (count($posts) &gt; 0)\n    @foreach ($posts as $post)\n      &lt;div class=\"row\"&gt;\n        &lt;div class=\"col-12\"&gt;\n          &lt;div class=\"row\"&gt;\n            &lt;div class=\"col-2\"&gt;\n              &lt;img class=\"img-fluid\" style=\"max-width:50%;\" src=\"{{ asset('images\/'.$post-&gt;image)}}\" alt=\"\"&gt;\n            &lt;\/div&gt;\n            &lt;div class=\"col-10\"&gt;\n              &lt;h4&gt;{{$post-&gt;title}}&lt;\/h4&gt;\n            &lt;\/div&gt;\n          &lt;\/div&gt;\n          &lt;p&gt;{{$post-&gt;description}}&lt;\/p&gt;\n          &lt;hr&gt;\n        &lt;\/div&gt;\n      &lt;\/div&gt;\n    @endforeach\n  @else\n    &lt;p&gt;No Posts found&lt;\/p&gt;\n  @endif\n&lt;\/div&gt;\n@endsection<\/code><\/pre>\n<p>Esse c\u00f3digo cria um bot\u00e3o <strong>Add Post <\/strong>(Adicionar Publica\u00e7\u00e3o). Quando clicado, ele cria uma publica\u00e7\u00e3o e passa todos os dados para o corpo da p\u00e1gina. A condi\u00e7\u00e3o <code>if<\/code> verifica se existem dados no banco de dados. Caso existam dados, s\u00e3o passados. Caso contr\u00e1rio, ela exibe &#8220;No Posts found.&#8221; (&#8220;Nenhuma publica\u00e7\u00e3o encontrada.&#8221;).<\/p>\n<h3>Crie a estrutura das suas p\u00e1ginas<\/h3>\n<p>Agora voc\u00ea pode executar seu aplicativo usando <code>php artisan serve<\/code> para criar e exibir as publica\u00e7\u00f5es do blog. Abra <code>&lt;a href=\"http:\/\/127.0.0.1:8000\"&gt;http:\/\/127.0.0.1:8000&lt;\/a &gt;<\/code>, e a p\u00e1gina dever\u00e1 ficar parecida com esta:<\/p>\n<figure style=\"width: 1343px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/list-preview-no-posts.png\" alt=\"O aplicativo de blog conforme aparece no navegador.\" width=\"1343\" height=\"350\"><figcaption class=\"wp-caption-text\">O aplicativo de blog conforme aparece no navegador.<\/figcaption><\/figure>\n<p>Se voc\u00ea adicionar uma publica\u00e7\u00e3o, ela ficar\u00e1 assim:<\/p>\n<figure style=\"width: 1359px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/preview-post.png\" alt=\"O aplicativo de blog exibe uma publica\u00e7\u00e3o no navegador.\" width=\"1359\" height=\"641\"><figcaption class=\"wp-caption-text\">O aplicativo de blog exibe uma publica\u00e7\u00e3o no navegador.<\/figcaption><\/figure>\n<h2>Implantando seu blog Laravel na Kinsta<\/h2>\n<p>Para implementar e testar seu aplicativo Laravel usando o <a href=\"https:\/\/sevalla.com\/application-hosting\/\">servi\u00e7o de Hospedagem de Aplicativos da Kinsta<\/a>:<\/p>\n<ol start=\"1\">\n<li>Crie um arquivo <strong>.htaccess<\/strong>.<\/li>\n<li>Envie o c\u00f3digo para um reposit\u00f3rio.<\/li>\n<li>Crie um banco de dados.<\/li>\n<li>Configure um projeto no MyKinsta.<\/li>\n<li>Crie e implante seu blog.<\/li>\n<\/ol>\n<h3>Crie um arquivo .htaccess<\/h3>\n<p>Na pasta raiz do projeto, crie um arquivo chamado <strong>.htaccess<\/strong> e adicione o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"language-apacheconf\">&lt;IfModule mod_rewrite.c&gt;\n  RewriteEngine On\n  RewriteRule ^(.*)$ public\/$1 [L]\n&lt;\/IfModule&gt;<\/code><\/pre>\n<p>Esse c\u00f3digo redireciona as solicita\u00e7\u00f5es do aplicativo para <strong>public\/index.php<\/strong> na implanta\u00e7\u00e3o.<\/p>\n<h3>Envie seu c\u00f3digo para um reposit\u00f3rio<\/h3>\n<p>Crie um reposit\u00f3rio para o seu projeto e publique o c\u00f3digo. Voc\u00ea pode usar o GitHub, GitLab ou Bitbucket para hospedar seu c\u00f3digo e implant\u00e1-lo no <a href=\"https:\/\/my.kinsta.com\/login?lang=pt\">MyKinsta<\/a>.<\/p>\n<h3>Configure o banco de dados em seu painel MyKinsta<\/h3>\n<p>Para criar um banco de dados no MyKinsta:<\/p>\n<ol start=\"1\">\n<li>Clique no bot\u00e3o <strong>Adicionar servi\u00e7o<\/strong> e selecione <strong>Banco de dados<\/strong>.<\/li>\n<li>Insira os detalhes do seu banco de dados conforme mostrado abaixo. Observe que, para que sua implanta\u00e7\u00e3o seja bem-sucedida, voc\u00ea deve deixar o <strong>Nome de usu\u00e1rio do banco de d<\/strong><strong>ados<\/strong> como valor padr\u00e3o.<\/li>\n<\/ol>\n<figure style=\"width: 1136px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/mykinsta-create-database.png\" alt=\"Criando um banco de dados no MyKinsta.\" width=\"1136\" height=\"739\"><figcaption class=\"wp-caption-text\">Criando um banco de dados no MyKinsta.<\/figcaption><\/figure>\n<p>Os detalhes incluem <strong>Nome do banco de dados<\/strong>, <strong>Nome de exibi\u00e7\u00e3o<\/strong>, <strong>Tipo do banco de dados<\/strong>, <strong>Vers\u00e3o<\/strong>, <strong>Nome de usu\u00e1rio do banco de dados<\/strong>, <strong>Local do centro de dados<\/strong> e <strong>Tamanho<\/strong>. Esta demonstra\u00e7\u00e3o usa MariaDB para o banco de dados e o <strong>Tamanho<\/strong> \u00e9 <strong>Db3 (1CPU \/ 4GB RAM \/ 10GB de espa\u00e7o em disco, 65 USD\/m\u00eas)<\/strong>. Voc\u00ea pode escolher o tipo e o tamanho do banco de dados que atenda \u00e0s suas necessidades espec\u00edficas.<\/p>\n<ol start=\"3\">\n<li>Clique em <strong>Continuar<\/strong>.<\/li>\n<li>Confirme o custo mensal e o m\u00e9todo de pagamento e, em seguida, clique em <strong>Criar banco de dados<\/strong>.<\/li>\n<\/ol>\n<h3>Configure o projeto no MyKinsta<\/h3>\n<p>Para implantar seu aplicativo no MyKinsta:<\/p>\n<ol start=\"1\">\n<li>Clique no <strong>Painel de controle<\/strong>.<\/li>\n<li>Clique em <strong>Adicionar servi\u00e7o<\/strong>\u00a0e selecione <strong>Aplicativo<\/strong>, conforme mostrado abaixo:<\/li>\n<\/ol>\n<figure style=\"width: 1399px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/mykinsta-create-app.png\" alt=\"O painel MyKinsta ao adicionar o servi\u00e7o de aplicativo.\" width=\"1399\" height=\"493\"><figcaption class=\"wp-caption-text\">O painel MyKinsta ao adicionar o servi\u00e7o de aplicativo.<\/figcaption><\/figure>\n<p>O MyKinsta redireciona voc\u00ea para a p\u00e1gina <strong>Adicionar aplicativo<\/strong>.<\/p>\n<ol start=\"1\">\n<li>Na se\u00e7\u00e3o <strong>Selecionar branch<\/strong>, selecione o reposit\u00f3rio do GitHub e marque a op\u00e7\u00e3o <strong>Adicionar implanta\u00e7\u00e3o no commit<\/strong>.<\/li>\n<li>Em <strong>Detalhes b\u00e1sicos<\/strong>, insira o nome do aplicativo e selecione o local do centro de dados para o seu aplicativo.<\/li>\n<li>Como o Laravel precisa de uma chave de aplicativo durante a implanta\u00e7\u00e3o, no card <strong>Vari\u00e1veis de ambiente<\/strong>, adicione uma <strong>APP_KEY<\/strong> como Chave 1. Voc\u00ea pode usar a <strong>APP_KEY<\/strong> definida em seu arquivo <strong>.env<\/strong> local ou usar um <a href=\"https:\/\/generate-random.org\/laravel-key-generator?count=1\">gerador on-line de chaves do Laravel<\/a>\u00a0para obter uma.<\/li>\n<li>Clique em <strong>Continuar<\/strong>.<\/li>\n<li>Selecione os recursos de build (CPU e RAM) para o seu aplicativo. Esta demonstra\u00e7\u00e3o usa a <strong>m\u00e1quina de build padr\u00e3o (1CPU \/ 4 GB de RAM) \u2013 0,02USD \/ minuto<\/strong>.<\/li>\n<li>Deixe marcado o bot\u00e3o de sele\u00e7\u00e3o <strong>Configurar imagem do cont\u00eainer automaticamente<\/strong>.<\/li>\n<li>Clique em <strong>Continuar<\/strong>.<\/li>\n<li>Na p\u00e1gina <strong>Configurar<\/strong>\u00a0<strong>seus processos<\/strong>, voc\u00ea pode alterar o tamanho do pod e a inst\u00e2ncia do seu aplicativo selecionando as respectivas caixas. Esta demonstra\u00e7\u00e3o usa os valores padr\u00e3o.<\/li>\n<li>Clique em <strong>Continuar<\/strong>.<\/li>\n<li>Por fim, clique no bot\u00e3o <strong>Confirmar m\u00e9todo de pagamento<\/strong> para iniciar a implanta\u00e7\u00e3o do aplicativo. Ao clicar nesse bot\u00e3o, tamb\u00e9m, voc\u00ea ser\u00e1 direcionado \u00e0 p\u00e1gina <strong>Detalhes da implanta\u00e7\u00e3o<\/strong> para visualizar o andamento da implanta\u00e7\u00e3o.<\/li>\n<\/ol>\n<h3>Execute o build e implante seu aplicativo<\/h3>\n<p>Com o banco de dados e o aplicativo hospedados, conecte o banco de dados ao seu aplicativo e execute o build para realizar a implanta\u00e7\u00e3o.<\/p>\n<p>Para conectar o banco de dados, use as conex\u00f5es externas do seu banco de dados hospedado. Na aba <strong>Informa\u00e7\u00f5es <\/strong>do seu banco de dados hospedado, voc\u00ea ver\u00e1 <strong>Conex\u00f5es externas<\/strong>, conforme mostrado abaixo:<\/p>\n<figure style=\"width: 1120px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/mykinsta-db-external-connections.png\" alt=\"Conex\u00f5es externas do seu banco de dados hospedado.\" width=\"1120\" height=\"498\"><figcaption class=\"wp-caption-text\">Conex\u00f5es externas do seu banco de dados hospedado.<\/figcaption><\/figure>\n<ol start=\"1\">\n<li>Na p\u00e1gina <strong>Configura\u00e7\u00f5es <\/strong>do aplicativo implantado, acesse o card<strong>\u00a0Vari\u00e1vel de ambiente<\/strong>.<\/li>\n<li>Clique em <strong>Adicionar vari\u00e1vel de ambiente<\/strong> para adicionar as conex\u00f5es externas do seu banco de dados hospedado com o valor correspondente. Use as mesmas vari\u00e1veis que voc\u00ea tem em seu arquivo <strong>.env<\/strong>.<\/li>\n<\/ol>\n<figure style=\"width: 1107px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/mykinsta-app-env-variables.png\" alt=\"As vari\u00e1veis de ambiente para o seu banco de dados hospedado.\" width=\"1107\" height=\"700\"><figcaption class=\"wp-caption-text\">As vari\u00e1veis de ambiente para o seu banco de dados hospedado.<\/figcaption><\/figure>\n<p>Esta captura de tela \u00e9 \u00fatil se voc\u00ea considerar marcar as vari\u00e1veis &lt;code&gt;env&lt;\/code&gt; que editou manualmente, para diferenci\u00e1-las das outras.<\/p>\n<p><strong>APP_URL <\/strong>\u00e9 a URL do seu aplicativo hospedado, e <strong>DB_CONNECTION<\/strong> \u00e9 <code>mysql<\/code>.<\/p>\n<ol start=\"1\">\n<li>V\u00e1 para a p\u00e1gina <strong>Configura\u00e7\u00f5es<\/strong> do seu aplicativo.<\/li>\n<li>No card <strong>Buildpack,<\/strong> adicione PHP e Node.js como <strong>Buildpacks<\/strong>. Como este \u00e9 um aplicativo PHP, voc\u00ea deve adicionar o Buildpack PHP por \u00faltimo.<\/li>\n<li>Clique em <strong>Implantar agora<\/strong> para refazer a build do seu aplicativo.<\/li>\n<\/ol>\n<p>Em seguida, adicione um processo que migrar\u00e1 o banco de dados.<\/p>\n<ol start=\"1\">\n<li>V\u00e1 at\u00e9 a aba <strong>Processos <\/strong>na p\u00e1gina do aplicativo hospedado.<\/li>\n<li>Selecione <strong>Criar processo<\/strong> no card <strong>Processos de execu\u00e7\u00e3o<\/strong>.<\/li>\n<li>Insira <strong>Migra\u00e7\u00e3o<\/strong> como o nome, <strong>Worker em segundo plano<\/strong> como o tipo, e <code>php artisan migrate --force<\/code> como um comando start. Voc\u00ea pode deixar o tamanho do pod e as inst\u00e2ncias com os valores padr\u00e3o.<\/li>\n<li>Selecione <strong>Continuar <\/strong>para criar o processo. Essa a\u00e7\u00e3o aciona um novo build e reimplanta o aplicativo.<\/li>\n<li>Na aba <strong>Dom\u00ednios <\/strong>do seu aplicativo, clique no link do aplicativo. Voc\u00ea pode ver que agora ele est\u00e1 instalado e em execu\u00e7\u00e3o.<\/li>\n<li>Observe que o aplicativo de blog implantado na MyKinsta n\u00e3o exibe nenhuma publica\u00e7\u00e3o. Crie uma nova publica\u00e7\u00e3o inserindo seu t\u00edtulo, adicionando uma descri\u00e7\u00e3o e escolhendo uma imagem.<\/li>\n<\/ol>\n<h2>Resumo<\/h2>\n<p>O Laravel facilita o desenvolvimento r\u00e1pido de um blog simples. Seu r\u00e1pido carregamento de p\u00e1ginas, s\u00f3lida arquitetura de controladores e seguran\u00e7a eficaz tornam o aprimoramento do desempenho de um aplicativo uma tarefa f\u00e1cil. Enquanto isso, o MyKinsta permite que voc\u00ea lance e disponibilize seus aplicativos web de maneira \u00e1gil e eficiente. O modelo flex\u00edvel de pre\u00e7os do MyKinsta \u00e9 baseado no uso, eliminando custos ocultos.<\/p>\n<p>Quando a Kinsta hospeda seu aplicativo Laravel, ele \u00e9 executado na <a href=\"https:\/\/kinsta.com\/pt\/blog\/plataforma-de-nuvem-para-desenvolvedores\/\">Google Cloud Platform no n\u00edvel Premium<\/a>, tornando-o o mais r\u00e1pido poss\u00edvel. A Kinsta tamb\u00e9m inclui prote\u00e7\u00e3o e mitiga\u00e7\u00e3o de DDoS de n\u00edvel corporativo com o Cloudflare e firewalls avan\u00e7ados para manter os agentes mal-intencionados afastados, e muito mais.<\/p>\n<p>Comece agora mesmo a <a href=\"https:\/\/kinsta.com\/pt\/inscreva-se\/?product_type=app-db\">avalia\u00e7\u00e3o gratuita<\/a> da Hospedagem de Aplicativos para otimizar o desenvolvimento e a hospedagem dos seus aplicativos web!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O Laravel \u00e9 um framework de aplicativos web em PHP com uma sintaxe expressiva e elegante. Possui uma vasta biblioteca de pacotes e gerencia grande parte &#8230;<\/p>\n","protected":false},"author":290,"featured_media":61771,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[984],"class_list":["post-61770","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-laravel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Como Criar um Blog no Laravel - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Este guia passo a passo ir\u00e1 conduzi-lo em todo o processo de criar um blog utilizando Laravel e disponibiliz\u00e1-lo on-line com a Kinsta.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como Criar um Blog no Laravel\" \/>\n<meta property=\"og:description\" content=\"Este guia passo a passo ir\u00e1 conduzi-lo em todo o processo de criar um blog utilizando Laravel e disponibiliz\u00e1-lo on-line com a Kinsta.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-13T07:26:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-14T09:21:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-blog.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"3042\" \/>\n\t<meta property=\"og:image:height\" content=\"1521\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Marcia Ramos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Este guia passo a passo ir\u00e1 conduzi-lo em todo o processo de criar um blog utilizando Laravel e disponibiliz\u00e1-lo on-line com a Kinsta.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-blog.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marcia Ramos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/\"},\"author\":{\"name\":\"Marcia Ramos\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116\"},\"headline\":\"Como Criar um Blog no Laravel\",\"datePublished\":\"2023-11-13T07:26:34+00:00\",\"dateModified\":\"2023-11-14T09:21:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/\"},\"wordCount\":3018,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-blog.jpg\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/\",\"name\":\"Como Criar um Blog no Laravel - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-blog.jpg\",\"datePublished\":\"2023-11-13T07:26:34+00:00\",\"dateModified\":\"2023-11-14T09:21:29+00:00\",\"description\":\"Este guia passo a passo ir\u00e1 conduzi-lo em todo o processo de criar um blog utilizando Laravel e disponibiliz\u00e1-lo on-line com a Kinsta.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-blog.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-blog.jpg\",\"width\":3042,\"height\":1521},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Como Criar um Blog no Laravel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116\",\"name\":\"Marcia Ramos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g\",\"caption\":\"Marcia Ramos\"},\"description\":\"I'm the Editorial Team Lead at Kinsta. I'm a open source enthusiast and I love coding. With more than 10 years of technical writing and editing for the tech industry, I love collaborating with people to create clear and concise pieces of content and improve workflows.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/marciadiasramos\/\"],\"honorificSuffix\":\"B.Sc.\",\"gender\":\"Female\",\"knowsLanguage\":[\"English\",\"Portuguese\"],\"jobTitle\":\"Editorial Team Lead\",\"worksFor\":\"Kinsta Inc.\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/author\/marciaramos\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Como Criar um Blog no Laravel - Kinsta\u00ae","description":"Este guia passo a passo ir\u00e1 conduzi-lo em todo o processo de criar um blog utilizando Laravel e disponibiliz\u00e1-lo on-line com a Kinsta.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/","og_locale":"pt_PT","og_type":"article","og_title":"Como Criar um Blog no Laravel","og_description":"Este guia passo a passo ir\u00e1 conduzi-lo em todo o processo de criar um blog utilizando Laravel e disponibiliz\u00e1-lo on-line com a Kinsta.","og_url":"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2023-11-13T07:26:34+00:00","article_modified_time":"2023-11-14T09:21:29+00:00","og_image":[{"width":3042,"height":1521,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-blog.jpg","type":"image\/jpeg"}],"author":"Marcia Ramos","twitter_card":"summary_large_image","twitter_description":"Este guia passo a passo ir\u00e1 conduzi-lo em todo o processo de criar um blog utilizando Laravel e disponibiliz\u00e1-lo on-line com a Kinsta.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-blog.jpg","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Marcia Ramos","Tempo estimado de leitura":"17 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/"},"author":{"name":"Marcia Ramos","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116"},"headline":"Como Criar um Blog no Laravel","datePublished":"2023-11-13T07:26:34+00:00","dateModified":"2023-11-14T09:21:29+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/"},"wordCount":3018,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-blog.jpg","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/","url":"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/","name":"Como Criar um Blog no Laravel - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-blog.jpg","datePublished":"2023-11-13T07:26:34+00:00","dateModified":"2023-11-14T09:21:29+00:00","description":"Este guia passo a passo ir\u00e1 conduzi-lo em todo o processo de criar um blog utilizando Laravel e disponibiliz\u00e1-lo on-line com a Kinsta.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-blog.jpg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-blog.jpg","width":3042,"height":1521},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/blog-laravel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/pt\/topicos\/laravel\/"},{"@type":"ListItem","position":3,"name":"Como Criar um Blog no Laravel"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116","name":"Marcia Ramos","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g","caption":"Marcia Ramos"},"description":"I'm the Editorial Team Lead at Kinsta. I'm a open source enthusiast and I love coding. With more than 10 years of technical writing and editing for the tech industry, I love collaborating with people to create clear and concise pieces of content and improve workflows.","sameAs":["https:\/\/www.linkedin.com\/in\/marciadiasramos\/"],"honorificSuffix":"B.Sc.","gender":"Female","knowsLanguage":["English","Portuguese"],"jobTitle":"Editorial Team Lead","worksFor":"Kinsta Inc.","url":"https:\/\/kinsta.com\/pt\/blog\/author\/marciaramos\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/61770","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/290"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=61770"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/61770\/revisions"}],"predecessor-version":[{"id":64837,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/61770\/revisions\/64837"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/61770\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/61770\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/61770\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/61770\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/61770\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/61770\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/61770\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/61770\/translations\/es"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/61770\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/61771"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=61770"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=61770"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=61770"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}