positibe / unique-views-bundle
Symfony PositibeUniqueViewsBundle for count the number of views of a object model
Installs: 113
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 2
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- symfony/framework-bundle: ^3.4||^4.0
This package is not auto-updated.
Last update: 2025-03-01 20:50:39 UTC
README
This bundle allow you add a counter system to your visitable entities.
Installation
To install the bundle just add the dependent bundles:
php composer.phar require positibe/media-bundle
Next, be sure to enable the bundles in your application kernel:
<?php
// app/AppKernel.php
public function registerBundles()
{
return array(
// ...
new Positibe\Bundle\UniqueViewsBundle\PositibeUniqueViewsBundle(),
// ...
);
}
Documentation in 2 step
-
Implement the VisitableInterface
// src/AppBundle/Entity/Post.php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM; use Positibe\Bundle\UniqueViewsBundle\Model\VisitableInterface;
class Post implement VisitableInterface {
/** * @ORM\Column(name="count_views", type="integer") */ protected $countViews = 0; /** * @ORM\Column(name="slug", type="string", length=255) */ protected $slug; public function getSlug() { return $this->slug; } /** * {@inheritdoc} */ public function getVisitableId() { return $this->getSlug(); } /** * {@inheritdoc} */ public function getVisitableType() { return 'post'; } /** * {@inheritdoc} */ public function onNewViewed() { return $this->countViews++; } /** * {@inheritdoc} */ public function countViews() { return $this->countViews; }
}
Tips:
You could use the AbstractVisitable
or VisitableTrait
instead to minimize your code.
// src/AppBundle/Entity/Post.php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Positibe\Bundle\UniqueViewsBundle\Model\VisitableInterface;
class Post implement VisitableInterface {
use VisitableTrait;
/**
* @ORM\Column(name="slug", type="string", length=255)
*/
protected $slug;
public function getSlug()
{
return $this->slug;
}
/**
* {@inheritdoc}
*/
public function getVisitableId()
{
return $this->getSlug();
}
}
-
On a countable template you could count views using
positibe_unique_views
function.{# app/Resources/views/post/show.html.twig #}
{{ post.title }}
{{ positibe_unique_views(post) }} unique views
2.1. On a countable controller you could count views using positibe_unique_views.views_counter
service:
//src/AppBundle/Controller/PostController
$this->get('positibe_unique_views.views_counter')->count($post);