{"id":44363,"date":"2021-09-28T11:58:39","date_gmt":"2021-09-28T09:58:39","guid":{"rendered":"https:\/\/kinqsta.com\/?p=100639"},"modified":"2025-02-07T11:07:50","modified_gmt":"2025-02-07T14:07:50","slug":"sitema-comentarios-laravel","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/","title":{"rendered":"Construindo um Sistema de Coment\u00e1rios em Tempo Real com Laravel"},"content":{"rendered":"<p>Para construir confian\u00e7a na sua comunidade on-line ou blog, um elemento crucial que voc\u00ea vai querer \u00e9 um sistema de coment\u00e1rios em tempo real bem desenhado no Laravel.<\/p>\n<p>No entanto, n\u00e3o \u00e9 f\u00e1cil acertar na primeira tentativa, a menos que voc\u00ea confie em sistemas de coment\u00e1rios auto-hospedados, como <a href=\"https:\/\/kinqsta.com\/pt\/blog\/melhores-plugins-de-comentarios-do-wordpress\/#disqus\">Disqus<\/a> ou Commento, cada um deles com seu pr\u00f3prio conjunto de desvantagens. Eles possuem seus dados, oferecem desenhos e customiza\u00e7\u00f5es limitadas e, o mais importante, n\u00e3o s\u00e3o gratuitos.<\/p>\n<p>Com estas limita\u00e7\u00f5es, se a id\u00e9ia de construir seu sistema de coment\u00e1rios em tempo real &#8211; com os benef\u00edcios de controlar seus dados, projetar e personalizar o visual para caber em seu blog &#8211; lhe atrai, continue lendo.<\/p>\n<p>Este artigo ir\u00e1 ensin\u00e1-lo a desenvolver um sistema de coment\u00e1rios bem concebido e em tempo real com diferentes funcionalidades de coment\u00e1rio. Seguindo os princ\u00edpios de construir um <a href=\"https:\/\/masteringbackend.com\/posts\/build-a-real-time-chat-app-with-vue-3-socket-io-and-nodejs\">aplicativo de chat em tempo real com Vue.js e Socket.io<\/a>, vamos usar Laravel, Pusher e React para desenvolver o sistema de coment\u00e1rios em tempo real.<\/p>\n<p>Vamos nessa!<\/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>O que vamos construir<\/h2>\n<p>Construiremos um <a href=\"https:\/\/www.youtube.com\/watch?v=zrKgjbSn9F0\">sistema de coment\u00e1rios em tempo real<\/a> que pode ser integrado em qualquer site ou blog para criar credibilidade na comunidade.<\/p>\n\n<h2>Vis\u00e3o geral dos blocos de constru\u00e7\u00e3o: Laravel, Pusher, e Vue<\/h2>\n<p>Antes de mergulharmos no desenvolvimento, vamos discutir as tecnologias que vamos usar para desenvolver o nosso sistema de coment\u00e1rios em tempo real.<\/p>\n<h3>Laravel<\/h3>\n<p><a href=\"https:\/\/kinqsta.com\/pt\/blog\/o-que-e-laravel\/\">Laravel<\/a> \u00e9 uma framework\u00a0PHP de c\u00f3digo aberto orientada para MVC. \u00c9 usado para construir aplicativos web PHP simples ou complexas, conhecidas pela sua elegante sintaxe. <a href=\"https:\/\/kinqsta.com\/pt\/blog\/tutoriais-laravel\/\">Conhecer Laravel<\/a> \u00e9 importante para desenvolver este sistema de coment\u00e1rios.<\/p>\n<h3>Pusher<\/h3>\n<p>O <a href=\"https:\/\/pusher.com\/\">Pusher<\/a> permite aos desenvolvedores criar recursos em tempo real em escala. Este artigo ir\u00e1 combinar o <a href=\"https:\/\/laravel.com\/docs\/5.4\/broadcasting\">Laravel Echo<\/a> para criar um evento de transmiss\u00e3o em tempo real para o servidor Pusher e exibir o conte\u00fado no front-end com o Vue.js.<\/p>\n<h3>Vue.js<\/h3>\n<p>O <a href=\"https:\/\/kinqsta.com\/pt\/blog\/vue-js\/\">Vue.js<\/a> \u00e9 a nossa framework front-end base. O Vue.js \u00e9 uma framework front-end de JavaScript progressiva conhecida por sua abordagem f\u00e1cil de aprender e direta para o desenvolvimento de front-end. Vamos utilizar o Vue.js para desenvolver o nosso sistema de coment\u00e1rios em tempo real.<\/p>\n<h2>Construindo o sistema de coment\u00e1rios<\/h2>\n<p>Se o sistema de coment\u00e1rios que delineamos acima soa como o que voc\u00ea quer, vamos prosseguir com a constru\u00e7\u00e3o do sistema.<\/p>\n<h3>1. Instalan\u00e7\u00e3o e configura\u00e7\u00e3o do Laravel, Pusher e Echo<\/h3>\n<p>A instala\u00e7\u00e3o e configura\u00e7\u00e3o de Laravel, Echo e Pusher \u00e9 simples, pois Laravel fez todas as tarefas de fundo ao configurar o Laravel Echo para trabalhar perfeitamente com Pusher.<\/p>\n<p>Em primeiro lugar, vamos come\u00e7ar por instalar e configurar o Laravel, a nossa <a href=\"https:\/\/kinqsta.com\/pt\/blog\/frameworks-php-populares\/\">framework back-end PHP<\/a>. Voc\u00ea pode pegar uma nova inst\u00e2ncia de Laravel com este comando, desde que voc\u00ea tenha instalado o <a style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\" href=\"https:\/\/laravel.com\/docs\/8.x#the-laravel-installer\">Laravel CLI<\/a> globalmente:<\/p>\n<pre><code class=\"language-bash\">laravel new commenter<\/code><\/pre>\n<p>Sua nova inst\u00e2ncia Laravel ser\u00e1 instalada em uma pasta chamada commenter. Vamos abrir a pasta no nosso <a href=\"https:\/\/kinqsta.com\/pt\/blog\/php-editor\/#1-visual-studio-code\">VSCode<\/a> e navegar at\u00e9 ela no nosso terminal:<\/p>\n<pre><code class=\"language-bash\">cd commenter\n\ncode .<\/code><\/pre>\n<p>Antes de iniciarmos nosso servidor de desenvolvimento, vamos instalar e configurar alguns pacotes necess\u00e1rios que ser\u00e3o utilizados para o projeto.<\/p>\n<p>Execute este comando para instalar o Pusher PHP SDK:<\/p>\n<pre><code class=\"language-bash\">composer require pusher\/pusher-php-server<\/code><\/pre>\n<p>Execute este comando para instalar os pacotes NPM necess\u00e1rios para o front-end do Vue.js:<\/p>\n<pre><code class=\"language-bash\">npm install --save laravel-echo pusher-js<\/code><\/pre>\n<p>A seguir, vamos configurar o Laravel Echo e o Pusher. Abra seu arquivo <strong>resources\/js\/bootstrap.js <\/strong>e cole nos seguintes scripts:<\/p>\n<pre><code class=\"language-javascript\">window._ = require(\"lodash\");\nwindow.axios = require(\"axios\");\nwindow.moment = require(\"moment\");\nwindow.axios.defaults.headers.common[\"X-Requested-With\"] = \"XMLHttpRequest\";\nwindow.axios.defaults.headers.post[\"Content-Type\"] =\n    \"application\/x-www-form-urlencoded\";\nwindow.axios.defaults.headers.common.crossDomain = true;\nwindow.axios.defaults.baseURL = \"\/api\";\nlet token = document.head.querySelector('meta[name=\"csrf-token\"]');\nif (token) {\n    window.axios.defaults.headers.common[\"X-CSRF-TOKEN\"] = token.content;\n} else {\n    console.error(\"CSRF token not found\");\n}\n\n\n\/**\n * Echo exposes an expressive API for subscribing to channels and listening\n * for events that Laravel broadcasts. Echo and event broadcasting\n * allows your team to build robust real-time web applications quickly.\n *\/\nimport Echo from \"laravel-echo\";\nwindow.Pusher = require(\"pusher-js\");\nwindow.Echo = new Echo({\n    broadcaster: \"pusher\",\n    key: process.env.MIX_PUSHER_APP_KEY,\n    cluster: process.env.MIX_PUSHER_APP_CLUSTER,\n    forceTLS: true\n});<\/code><\/pre>\n<p>Voc\u00ea vai notar pelo script acima que estamos apenas configurando a inst\u00e2ncia Axios com nossas configura\u00e7\u00f5es padr\u00e3o. A seguir, vamos configurar o Laravel Echo para usar o Pusher e suas configura\u00e7\u00f5es.<\/p>\n<h3>2. Configura\u00e7\u00e3o e migra\u00e7\u00e3o da base de dados<\/h3>\n<p>A seguir, vamos criar e configurar a nossa base de dados para armazenar os coment\u00e1rios para a persist\u00eancia. Vamos usar o SQLite, embora voc\u00ea possa usar qualquer cliente de banco de dados de sua escolha.<\/p>\n<p>Crie um arquivo <strong>database.sqlite <\/strong>dentro da pasta da base de dados e atualize o seu arquivo <strong>.env <\/strong>da seguinte forma:<\/p>\n<pre><code class=\"language-markdown\">DB_CONNECTION=sqlite\nDB_DATABASE=\/Users\/all\/paths\/to\/project\/commenter_be\/database\/database.sqlite\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_USERNAME=root\nDB_PASSWORD=<\/code><\/pre>\n<p>A seguir, execute este comando para criar a migra\u00e7\u00e3o de Coment\u00e1rios e atualize-a com os seguintes scripts:<\/p>\n<pre><code class=\"language-bash\">php artisan make:migration create_comments_table<\/code><\/pre>\n<p>Abra o arquivo <strong>database\/migrations\/xxxx_create_comments_table_xxxx.php<\/strong> e cole neste c\u00f3digo:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\nclass CreateCommentsTable extends Migration\n{\n    \/**\n     * Run the migrations.\n     *\n     * @return void\n     *\/\n    public function up()\n    {\n        Schema::create('comments', function (Blueprint $table) {\n            $table-&gt;id();\n            $table-&gt;string('content');\n            $table-&gt;string('author');\n            $table-&gt;timestamps();\n        });\n    }\n    \/**\n     * Reverse the migrations.\n     *\n     * @return void\n     *\/\n    public function down()\n    {\n        Schema::dropIfExists('comments');\n    }\n}<\/code><\/pre>\n<p>Isto ir\u00e1 criar uma nova tabela de banco de dados de coment\u00e1rios e adicionar colunas de conte\u00fado e autor.<\/p>\n<p>Finalmente, para criar a migra\u00e7\u00e3o, execute este comando:<\/p>\n<pre><code class=\"language-bash\">php artisan migrate<\/code><\/pre>\n<h3>3. Cria\u00e7\u00e3o de modelos<\/h3>\n<p>Em Laravel, os modelos s\u00e3o significativos &#8211; s\u00e3o a forma mais segura de comunicar com a nossa base de dados e lidar com a gest\u00e3o de dados.<\/p>\n<p>Para criar um modelo no Laravel, vamos executar o seguinte comando:<\/p>\n<pre><code class=\"language-bash\">php artisan make:model Comment<\/code><\/pre>\n<p>Em seguida, abra o arquivo <strong>app\/models\/Comment.php <\/strong>e cole o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace App\\Models;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nclass Comment extends Model\n{\n    use HasFactory;\n    protected $fillable = ['content', 'author'];\n}\n\n<\/code>The $fillable array allows us to create and update the model in mass.<\/pre>\n<h3>4. Criando controladores<\/h3>\n<p>Os controladores (Controllers) s\u00e3o cruciais porque abrigam toda a l\u00f3gica, neg\u00f3cios e outros aspectos dos nossos aplicativos, ent\u00e3o vamos criar um para lidar com a l\u00f3gica dos coment\u00e1rios:<\/p>\n<pre><code class=\"language-bash\">php artisan make:controller CommentController<\/code><\/pre>\n<p>Em seguida, abra o arquivo <strong>app\/Http\/Controllers\/CommentController.php <\/strong>e cole o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace App\\Http\\Controllers;\nuse App\\Models\\Comment;\nuse App\\Events\\CommentEvent;\nuse Illuminate\\Http\\Request;\n\nclass CommentController extends Controller\n{\n    \/\/\n    public function index()\n    {\n        return view('comments');\n    }\n    public function fetchComments()\n    {\n        $comments = Comment::all();\n        return response()-&gt;json($comments);\n    }\n    public function store(Request $request)\n    {\n        $comment = Comment::create($request-&gt;all());\n        event(new CommentEvent($comment));\n        return $comment;\n    }\n}<\/code><\/pre>\n<p>O controlador tem tr\u00eas m\u00e9todos diferentes: devolver uma vista de coment\u00e1rios, ir buscar todos os coment\u00e1rios e armazenar um novo coment\u00e1rio, respectivamente. Mais importante ainda, n\u00f3s acendemos um evento cada vez que armazenamos um novo coment\u00e1rio, que o front-end ir\u00e1 ouvir para atualizar a p\u00e1gina relevante com o novo coment\u00e1rio em tempo real, usando Pusher e Laravel Echo.<\/p>\n<h3>5. Criando rotas<\/h3>\n<p>Para configurar nossas rotas corretamente, vamos precisar atualizar muitos <a href=\"https:\/\/kinqsta.com\/pt\/blog\/arquivos-wordpress\/\">arquivos<\/a>, ent\u00e3o vamos come\u00e7ar.<\/p>\n<p>Primeiro, vamos atualizar o arquivo <strong>api.php <\/strong>na pasta routes. Abra o arquivo e adicione o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"language-php\">use App\\Http\\Controllers\\CommentController;\n\/\/...\n\nRoute::get('\/', [CommentController::class, 'index']);\nRoute::get('\/comments', [CommentController::class, 'fetchComments']);\nRoute::post('\/comments', [CommentController::class, 'store']);<\/code><\/pre>\n<p>Em seguida, abra o arquivo <strong>channels.php <\/strong>na mesma pasta e adicione o seguinte c\u00f3digo para autorizar o evento que disparamos anteriormente:<\/p>\n<pre><code class=\"language-php\">Broadcast::channel('comment', function ($user) {\n    return true;\n});<\/code><\/pre>\n<p>Em seguida, abra o arquivo <strong>web.php <\/strong>na mesma pasta e adicione o seguinte c\u00f3digo para redirecionar nosso pedido para a p\u00e1gina inicial, onde o Vue.js ir\u00e1 peg\u00e1-lo:<\/p>\n<pre><code class=\"language-php\">use App\\Http\\Controllers\\CommentController;\n\/\/...\n\nRoute::get('\/', [CommentController::class, 'index']);<\/code><\/pre>\n<p>Finalmente, vamos criar um novo arquivo blade na pasta <strong>resources\/views <\/strong>chamado <strong>comments.blade.php <\/strong>e adicionar o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\" \/&gt;\n    &lt;title&gt;Commenter&lt;\/title&gt;\n    &lt;meta name=\"csrf-token\" content=\"{{ csrf_token() }}\"&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0\"&gt;\n\n    &lt;link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/bulma\/0.7.1\/css\/bulma.min.css\" \/&gt;\n    &lt;style&gt;\n        .container {\n            margin: 0 auto;\n            position: relative;\n            width: unset;\n        }\n        #app {\n            width: 60%;\n            margin: 4rem auto;\n        }\n        .question-wrapper {\n            text-align: center;\n        }\n    &lt;\/style&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n\n\n    &lt;div id=\"app\"&gt;\n        &lt;div class=\"container\"&gt;\n            &lt;div class=\"question-wrapper\"&gt;\n                &lt;h5 class=\"is-size-2\" style=\"color: #220052;\"&gt;\n                    What do you think about &lt;span style=\"color: #47b784;\"&gt;Dogs&lt;\/span&gt;?&lt;\/h5&gt;\n                &lt;br&gt;\n                &lt;a href=\"#Form\" class=\"button is-medium has-shadow has-text-white\" style=\"background-color: #47b784\"&gt;Comment&lt;\/a&gt;\n            &lt;\/div&gt;\n            &lt;br&gt;&lt;br&gt;\n            &lt;comments&gt;&lt;\/comments&gt;\n            &lt;new-comment&gt;&lt;\/new-comment&gt;\n        &lt;\/div&gt;\n    &lt;\/div&gt;\n    &lt;script async src=\"{{mix('js\/app.js')}}\"&gt;&lt;\/script&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>O script adiciona um t\u00edtulo de postagem e um componente Vue para exibir e adicionar novos coment\u00e1rios ao t\u00edtulo de postagem criado acima.<\/p>\n<p>Execute os seguintes comandos para testar se voc\u00ea obt\u00e9m tudo corretamente:<\/p>\n<pre><code class=\"language-bash\">npm run watch\n\nphp artisan serve<\/code><\/pre>\n<p>Se lhe for apresentada esta p\u00e1gina, voc\u00ea est\u00e1 pronto para passar ao pr\u00f3ximo passo neste artigo.<\/p>\n<figure id=\"attachment_101484\" aria-describedby=\"caption-attachment-101484\" style=\"width: 1200px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-101484 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2021\/08\/Commenting-System-Laravel.png\" alt=\"Sistema de coment\u00e1rios ao vivo em Laravel\" width=\"1200\" height=\"463\"><figcaption id=\"caption-attachment-101484\" class=\"wp-caption-text\">Sistema de coment\u00e1rios em tempo real no Laravel<\/figcaption><\/figure>\n<h3>6. Configura\u00e7\u00e3o do Vue (Front-end)<\/h3>\n<p>Vamos criar e configurar a nossa inst\u00e2ncia Vue para criar e exibir todos os coment\u00e1rios feitos neste <a href=\"https:\/\/kinqsta.com\/pt\/blog\/obter-id-artigo-wordpress\/\">artigo<\/a>.<\/p>\n<p>Vamos come\u00e7ar com a montagem da nossa loja Vuex. Crie os seguintes arquivos na pasta resource\/js\/store.<\/p>\n<h4>Criando estado de coment\u00e1rio<\/h4>\n<p>Crie actions.js e adicione o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"language-javascript\">let actions = {\n    ADD_COMMENT({ commit }, comment) {\n        return new Promise((resolve, reject) =&gt; {\n            axios\n                .post(`\/comments`, comment)\n                .then(response =&gt; {\n                    resolve(response);\n                })\n                .catch(err =&gt; {\n                    reject(err);\n                });\n        });\n    },\n    GET_COMMENTS({ commit }) {\n        axios\n            .get(\"\/comments\")\n            .then(res =&gt; {\n                {\n                    commit(\"GET_COMMENTS\", res.data);\n                }\n            })\n            .catch(err =&gt; {\n                console.log(err);\n            });\n    }\n};\nexport default actions;<\/code><\/pre>\n<p>O arquivo Action faz uma chamada para o ponto final do coment\u00e1rio no back-end.<\/p>\n<p>Em seguida, crie um arquivo getters.js e adicione o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"language-javascript\">let getters = {\n    comments: state =&gt; {\n        return state.comments;\n    }\n};\nexport default getters;<\/code><\/pre>\n<p>O arquivo Getter \u00e9 usado para recuperar todos os coment\u00e1rios no estado.<\/p>\n<p>Crie o arquivo mutations.js e cole o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"language-javascript\">let mutations = {\n    GET_COMMENTS(state, comments) {\n        state.comments = comments;\n    },\n    ADD_COMMENT(state, comment) {\n        state.comments = [...state.comments, comment];\n    }\n};\nexport default mutations;<\/code><\/pre>\n<p>Em seguida, crie um arquivo state.js e cole o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"language-javascript\">let state = {\n    comments: []\n};\nexport default state;<\/code><\/pre>\n<p>Finalmente, vamos adicionar tudo ao arquivo index.js exportado para a inst\u00e2ncia Vue, crie um arquivo index.js e adicione o seguinte:<\/p>\n<pre><code class=\"language-javascript\">import Vue from \"vue\";\nimport Vuex from \"vuex\";\nimport actions from \".\/actions\";\nimport mutations from \".\/mutations\";\nimport getters from \".\/getters\";\nimport state from \".\/state\";\nVue.use(Vuex);\nexport default new Vuex.Store({\n    state,\n    mutations,\n    getters,\n    actions\n});<\/code><\/pre>\n<h4>Criando componentes<\/h4>\n<p>Finalmente, vamos criar os nossos componentes de coment\u00e1rio para exibir e adicionar novos coment\u00e1rios. Vamos come\u00e7ar por criar o componente de coment\u00e1rio \u00fanico.<\/p>\n<p>Crie uma pasta <strong>resource\/js <\/strong>na pasta chamada components, adicione o <strong>comment.vue <\/strong>e adicione o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"language-javascript\">&lt;template&gt;\n  &lt;li class=\"comment-wrapper animate slideInLeft\"&gt;\n    &lt;div class=\"profile\"&gt;\n    &lt;\/div&gt;\n    &lt;div class=\"msg has-shadow\"&gt;\n      &lt;div class=\"msg-body\"&gt;\n        &lt;p class=\"name\"&gt;\n          {{ comment.author }} &lt;span class=\"date\"&gt;{{ posted_at }}&lt;\/span&gt;\n        &lt;\/p&gt;\n        &lt;p class=\"content\"&gt;{{ comment.content }}&lt;\/p&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n  &lt;\/li&gt;\n&lt;\/template&gt;\n    \n    &lt;script&gt;\nexport default {\n  name: \"Comment\",\n  props: [\"comment\"],\n  computed: {\n    posted_at() {\n      return moment(this.comment.created_at).format(\"MMMM Do YYYY\");\n    },\n\n  },\n};\n&lt;\/script&gt;\n    \n    &lt;style lang=\"scss\" scoped&gt;\n.comment-wrapper {\n  list-style: none;\n  text-align: left;\n  overflow: hidden;\n  margin-bottom: 2em;\n  padding: 0.4em;\n  .profile {\n    width: 80px;\n    float: left;\n  }\n  .msg-body {\n    padding: 0.8em;\n    color: #666;\n    line-height: 1.5;\n  }\n  .msg {\n    width: 86%;\n    float: left;\n    background-color: #fff;\n    border-radius: 0 5px 5px 5px;\n    position: relative;\n    &::after {\n      content: \" \";\n      position: absolute;\n      left: -13px;\n      top: 0;\n      border: 14px solid transparent;\n      border-top-color: #fff;\n    }\n  }\n  .date {\n    float: right;\n  }\n  .name {\n    margin: 0;\n    color: #999;\n    font-weight: 700;\n    font-size: 0.8em;\n  }\n  p:last-child {\n    margin-top: 0.6em;\n    margin-bottom: 0;\n  }\n}\n&lt;\/style&gt;<\/code><\/pre>\n<p>Em seguida, crie o seguinte arquivo chamado <strong>comments.vue <\/strong>na mesma pasta e adicione o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"language-javscript\">&lt;template&gt;\n  &lt;div class=\"container\"&gt;\n    &lt;ul class=\"comment-list\"&gt;\n      &lt;Comment\n        :key=\"comment.id\"\n        v-for=\"comment in comments\"\n        :comment=\"comment\"\n      &gt;&lt;\/Comment&gt;\n    &lt;\/ul&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n    \n    &lt;script&gt;\nimport { mapGetters } from \"vuex\";\nimport Comment from \".\/Comment\";\nexport default {\n  name: \"Comments\",\n  components: { Comment },\n  mounted() {\n    this.$store.dispatch(\"GET_COMMENTS\");\n    this.listen();\n  },\n  methods: {\n    listen() {\n      Echo.channel(\"comment\").listen(\"comment\", (e) =&gt; {\n        console.log(e);\n        this.$store.commit(\"ADD_COMMENT\", e);\n      });\n    },\n  },\n  computed: {\n    ...mapGetters([\"comments\"]),\n  },\n};\n&lt;\/script&gt;\n    \n    &lt;style scoped&gt;\n.comment-list {\n  padding: 1em 0;\n  margin-bottom: 15px;\n}\n&lt;\/style&gt;<\/code><\/pre>\n<p>Finalmente, crie um arquivo chamado <strong>NewComment.vue <\/strong>e adicione o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"language-javascript\">&lt;template&gt;\n  &lt;div id=\"commentForm\" class=\"box has-shadow has-background-white\"&gt;\n    &lt;form @keyup.enter=\"postComment\"&gt;\n      &lt;div class=\"field has-margin-top\"&gt;\n        &lt;div class=\"field has-margin-top\"&gt;\n          &lt;label class=\"label\"&gt;Your name&lt;\/label&gt;\n          &lt;div class=\"control\"&gt;\n            &lt;input\n              type=\"text\"\n              placeholder=\"Your name\"\n              class=\"input is-medium\"\n              v-model=\"comment.author\"\n            \/&gt;\n          &lt;\/div&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"field has-margin-top\"&gt;\n          &lt;label class=\"label\"&gt;Your comment&lt;\/label&gt;\n          &lt;div class=\"control\"&gt;\n            &lt;textarea\n              style=\"height: 100px\"\n              name=\"comment\"\n              class=\"input is-medium\"\n              autocomplete=\"true\"\n              v-model=\"comment.content\"\n              placeholder=\"lorem ipsum\"\n            &gt;&lt;\/textarea&gt;\n          &lt;\/div&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"control has-margin-top\"&gt;\n          &lt;button\n            style=\"background-color: #47b784\"\n            :class=\"{ 'is-loading': submit }\"\n            class=\"button has-shadow is-medium has-text-white\"\n            :disabled=\"!isValid\"\n            @click.prevent=\"postComment\"\n            type=\"submit\"\n          &gt;\n            Submit\n          &lt;\/button&gt;\n        &lt;\/div&gt;\n      &lt;\/div&gt;\n    &lt;\/form&gt;\n    &lt;br \/&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n    \n    &lt;script&gt;\nexport default {\n  name: \"NewComment\",\n  data() {\n    return {\n      submit: false,\n      comment: {\n        content: \"\",\n        author: \"\",\n      },\n    };\n  },\n  methods: {\n    postComment() {\n      this.submit = true;\n      this.$store\n        .dispatch(\"ADD_COMMENT\", this.comment)\n        .then((response) =&gt; {\n          this.submit = false;\n          if (response.data) console.log(\"success\");\n        })\n        .catch((err) =&gt; {\n          console.log(err);\n          this.submit = false;\n        });\n    },\n  },\n  computed: {\n    isValid() {\n      return this.comment.content !== \"\" && this.comment.author !== \"\";\n    },\n  },\n};\n&lt;\/script&gt;\n    \n    &lt;style scoped&gt;\n.has-margin-top {\n  margin-top: 15px;\n}\n&lt;\/style&gt;<\/code><\/pre>\n<p>Agora, abra o arquivo <strong>app.js <\/strong>e adicione o seguinte c\u00f3digo para registrar os componentes Vue que voc\u00ea criou anteriormente:<\/p>\n<pre><code class=\"language-javascript\">\/\/ resource\/js\/app.js\n\nrequire(\".\/bootstrap\");\nwindow.Vue = require(\"vue\");\nimport store from \".\/store\/index\";\n\nVue.component(\"comment\", require(\".\/components\/Comment\"));\nVue.component(\"comments\", require(\".\/components\/Comments\"));\nVue.component(\"new-comment\", require(\".\/components\/NewComment\"));\n\nconst app = new Vue({\n    el: \"#app\",\n    store\n});<\/code><\/pre>\n\n<h2>Resumo<\/h2>\n<p>E \u00e9 isso! Voc\u00ea acabou de aprender como construir um sistema de coment\u00e1rios em tempo real para o seu site usando Laravel.<\/p>\n<p>Discutimos os benef\u00edcios de criar e gerenciar um sistema de coment\u00e1rios em sua busca para construir confian\u00e7a em sua comunidade ou blog. Tamb\u00e9m exploramos como desenvolver um sistema de coment\u00e1rios bem desenhado e em tempo real desde o in\u00edcio, utilizando diferentes funcionalidades de coment\u00e1rios.<\/p>\n<p>Voc\u00ea pode clonar o c\u00f3digo fonte deste projeto <a href=\"https:\/\/github.com\/Kaperskyguru\/commenta\">nesta Github <\/a><a href=\"https:\/\/github.com\/Kaperskyguru\/commenta\">repo<\/a>.<\/p>\n<p>O que voc\u00ea acha do sistema de coment\u00e1rios em tempo real no Laravel que constru\u00edmos juntos? Informe-nos nos coment\u00e1rios!<\/p>\n<p>\u00a0<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Para construir confian\u00e7a na sua comunidade on-line ou blog, um elemento crucial que voc\u00ea vai querer \u00e9 um sistema de coment\u00e1rios em tempo real bem desenhado &#8230;<\/p>\n","protected":false},"author":193,"featured_media":44366,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[416,528],"topic":[996,984],"class_list":["post-44363","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-laravel","tag-web-developement","topic-frameworks-php","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>Construa um Sistema de Coment\u00e1rios ao Vivo Laravel<\/title>\n<meta name=\"description\" content=\"Aprenda como usar Laravel para construir um sistema de coment\u00e1rios em tempo real que pode ser integrado em qualquer site ou blog para criar confian\u00e7a.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Construindo um Sistema de Coment\u00e1rios em Tempo Real com Laravel\" \/>\n<meta property=\"og:description\" content=\"Aprenda como usar Laravel para construir um sistema de coment\u00e1rios em tempo real que pode ser integrado em qualquer site ou blog para criar confian\u00e7a.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-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=\"2021-09-28T09:58:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-07T14:07:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/09\/laravel-comments.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Solomon Eseme\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Aprenda como usar Laravel para construir um sistema de coment\u00e1rios em tempo real que pode ser integrado em qualquer site ou blog para criar confian\u00e7a.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/09\/laravel-comments.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@kaperskyguru\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Solomon Eseme\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/\"},\"author\":{\"name\":\"Solomon Eseme\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2\"},\"headline\":\"Construindo um Sistema de Coment\u00e1rios em Tempo Real com Laravel\",\"datePublished\":\"2021-09-28T09:58:39+00:00\",\"dateModified\":\"2025-02-07T14:07:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/\"},\"wordCount\":1549,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/09\/laravel-comments.jpeg\",\"keywords\":[\"laravel\",\"web developement\"],\"articleSection\":[\"Desenvolvimento WordPress\"],\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/\",\"url\":\"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/\",\"name\":\"Construa um Sistema de Coment\u00e1rios ao Vivo Laravel\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/09\/laravel-comments.jpeg\",\"datePublished\":\"2021-09-28T09:58:39+00:00\",\"dateModified\":\"2025-02-07T14:07:50+00:00\",\"description\":\"Aprenda como usar Laravel para construir um sistema de coment\u00e1rios em tempo real que pode ser integrado em qualquer site ou blog para criar confian\u00e7a.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/09\/laravel-comments.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/09\/laravel-comments.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"Construa um Sistema de Coment\u00e1rios ao Vivo Laravel\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinqsta.com\/pt\/topicos\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Construindo um Sistema de Coment\u00e1rios em Tempo Real com Laravel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#website\",\"url\":\"https:\/\/kinqsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.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:\/\/kinqsta.com\/pt\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2\",\"name\":\"Solomon Eseme\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1c701993f8ff8c8df2a4c5664834a4e5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1c701993f8ff8c8df2a4c5664834a4e5?s=96&d=mm&r=g\",\"caption\":\"Solomon Eseme\"},\"description\":\"I am a Software Engineer and Content Creator who is geared toward building high-performing and innovative products following best practices and industry standards. I also love writing about it at Masteringbackend.com. Follow me on Twitter, LinkedIn, and About Me\",\"sameAs\":[\"https:\/\/masteringbackend.com\",\"https:\/\/linkedin.com\/in\/solomoneseme\",\"https:\/\/x.com\/kaperskyguru\"],\"url\":\"https:\/\/kinqsta.com\/pt\/blog\/author\/solomoneseme\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Construa um Sistema de Coment\u00e1rios ao Vivo Laravel","description":"Aprenda como usar Laravel para construir um sistema de coment\u00e1rios em tempo real que pode ser integrado em qualquer site ou blog para criar confian\u00e7a.","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:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/","og_locale":"pt_PT","og_type":"article","og_title":"Construindo um Sistema de Coment\u00e1rios em Tempo Real com Laravel","og_description":"Aprenda como usar Laravel para construir um sistema de coment\u00e1rios em tempo real que pode ser integrado em qualquer site ou blog para criar confian\u00e7a.","og_url":"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2021-09-28T09:58:39+00:00","article_modified_time":"2025-02-07T14:07:50+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/09\/laravel-comments.jpeg","type":"image\/jpeg"}],"author":"Solomon Eseme","twitter_card":"summary_large_image","twitter_description":"Aprenda como usar Laravel para construir um sistema de coment\u00e1rios em tempo real que pode ser integrado em qualquer site ou blog para criar confian\u00e7a.","twitter_image":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/09\/laravel-comments.jpeg","twitter_creator":"@kaperskyguru","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Solomon Eseme","Tempo estimado de leitura":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/"},"author":{"name":"Solomon Eseme","@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2"},"headline":"Construindo um Sistema de Coment\u00e1rios em Tempo Real com Laravel","datePublished":"2021-09-28T09:58:39+00:00","dateModified":"2025-02-07T14:07:50+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/"},"wordCount":1549,"commentCount":1,"publisher":{"@id":"https:\/\/kinqsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/09\/laravel-comments.jpeg","keywords":["laravel","web developement"],"articleSection":["Desenvolvimento WordPress"],"inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/","url":"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/","name":"Construa um Sistema de Coment\u00e1rios ao Vivo Laravel","isPartOf":{"@id":"https:\/\/kinqsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/09\/laravel-comments.jpeg","datePublished":"2021-09-28T09:58:39+00:00","dateModified":"2025-02-07T14:07:50+00:00","description":"Aprenda como usar Laravel para construir um sistema de coment\u00e1rios em tempo real que pode ser integrado em qualquer site ou blog para criar confian\u00e7a.","breadcrumb":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/#primaryimage","url":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/09\/laravel-comments.jpeg","contentUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2021\/09\/laravel-comments.jpeg","width":1460,"height":730,"caption":"Construa um Sistema de Coment\u00e1rios ao Vivo Laravel"},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/pt\/blog\/sitema-comentarios-laravel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinqsta.com\/pt\/topicos\/laravel\/"},{"@type":"ListItem","position":3,"name":"Construindo um Sistema de Coment\u00e1rios em Tempo Real com Laravel"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/pt\/#website","url":"https:\/\/kinqsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinqsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.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:\/\/kinqsta.com\/pt\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2","name":"Solomon Eseme","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1c701993f8ff8c8df2a4c5664834a4e5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1c701993f8ff8c8df2a4c5664834a4e5?s=96&d=mm&r=g","caption":"Solomon Eseme"},"description":"I am a Software Engineer and Content Creator who is geared toward building high-performing and innovative products following best practices and industry standards. I also love writing about it at Masteringbackend.com. Follow me on Twitter, LinkedIn, and About Me","sameAs":["https:\/\/masteringbackend.com","https:\/\/linkedin.com\/in\/solomoneseme","https:\/\/x.com\/kaperskyguru"],"url":"https:\/\/kinqsta.com\/pt\/blog\/author\/solomoneseme\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts\/44363","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/users\/193"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/comments?post=44363"}],"version-history":[{"count":8,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts\/44363\/revisions"}],"predecessor-version":[{"id":44422,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts\/44363\/revisions\/44422"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/44363\/translations\/en"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/44363\/translations\/fr"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/44363\/translations\/es"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/44363\/translations\/it"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/44363\/translations\/de"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/44363\/translations\/pt"},{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/44363\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/media\/44366"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/media?parent=44363"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/tags?post=44363"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/topic?post=44363"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}