Como criar um contador de visitas para seu blog usando cookies no Laravel 5.8
Usaremos a Facades que o Laravel possui para Cookies que nos possibilita trabalhar de forma mais elegante com esse recurso do PHP
08/08/2019 14:30 Laravel
As Facades são interfaces estáticas existentes no contêiner de serviços do Laravel que tem como um dos benefícios uma sintaxe concisa que nos permite certa flexibilidade ao trabalhar com recursos do PHP. Basicamente, nos permite usar recursos sem ter que lembrar nomes de classe longos que devem ser injetados ou configurados manualmente. Saiba mais sobre Facades na documentação oficial do framework.
Para o nosso contador de visitas será preciso criar uma coluna "views" na tabela "posts" e para isso usaremos migrations. Usando o artisan, digitamos o código a seguir na linha de comando dentro do projeto:
php artisan make:migration alter_table_add_views_post --table=posts
Agora vamos adicionar a coluna views na migration que acabamos de criar e você encontra em database/migrations/. A classe deve ficar da seguinte forma:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AlterTableAddViewPost extends Migration
{
public function up()
{
Schema::table('posts', function (Blueprint $table) {
$table->bigInteger('views')->nullable();
});
}
public function down()
{
Schema::table('posts', function (Blueprint $table) {
$table->dropColumn('views');
});
}
}
Para que possamos rodar a migration e adicionar a coluna no banco de dados precisamos digitar o seguinte comando:
php artisan migrate
Tudo certo!
Sua coluna já está criada na tabela posts e agora vamos criar o contador de visitas. Dentro do seu controlador que exibe o post vamos adicionar o seguinte código:
public function article(int $id)
{
$post = Post::find($id);
if (!Cookie::has($post->id) && !Auth::check()) {
Cookie::queue($post->id, 'counter-views', 24 * 60);
$post->views += 1;
$post->save();
}
...
//aqui vai o retorno da view
}
Dentro da função que retorna o post fizemos uma verificação se existe o cookie cujo nome é o id do post, com o valor "counter-views" e defini o limite de expiração de 24hrs (24 * 60 min), ou seja, estamos contando visitas únicas e diárias. Se não existir o Cookie, somamos +1 visita e salvamos na coluna views do post em questão. Caso queira exibir a quatidade de visualizações no post, basta chamar {{ $post->views }} em sua view.
Pronto!
Seu contador de visitas está pronto e controlando visitas únicas a cada 24hrs.
Posts Relacionados
07/08/2019 09:02 Laravel
Como forçar redirecionamento para HTTPS no Laravel 5.8
Algumas alternativas utilizam configurações no .htaccess para forçar o redirecionamento para HTTPS, mas o Laravel nos oferece uma outra possibilidade usando Middleware
Ler mais