Service dans Twig extension
Bonjour ,
je débute sur Symfony 4 , je souhaite appeler une fonction getDateConnexion() dans TwigExtension. Il s'agit d'un compteur de connexion, si la date de connexion est égale à la date du jour pour un User alors on ajoute +1, et je récupère ce compteur pour l'afficher avec Twig sur un tableau de bord.
Cependant j'ai une erreur, pouvez vous m'aider ? Ou une autre approche est possible ? Je ne comprend pas ce qu'il attend . Merci d'avance pour vos réponses.
Citation:
Too few arguments to function App\Service\DateConnexionService::__construct(), 0 passed in C:\Blog\Axo\src\Twig\StatExtension.php on line 39 and exactly 1 expected
Le service :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| <?php
namespace App\Service;
use Doctrine\Common\Persistence\ObjectManager;
class DateConnexionService
{
//l'entité qui nous intéresse est réprésentée par entityClass
private $entityClass;
private $manager;
//injection de dépendance pour savoir qu'elles sont les informations nécessaire pour construire le service
public function __construct(ObjectManager $manager)
{
$this->manager=$manager;
}
public function setEntityClass($entityClass)
{
//permet de modifier l'entité
$this->entityClass= $entityClass;
return $this;
}
/**
* @return mixed
*/
public function getEntityClass()
{
return $this->entityClass;
}
public function getDateConnexion()
{
$repo = $this->manager->getRepository($this->entityClass);
$datesConnexion = $repo ->findBy(['connectedAt']);
$count = 0;
$dateN = new \DateTime();
$dateNow = $dateN->format('Y-m-d');
foreach ($datesConnexion as $dateConnexion) {
$dateCo = $dateConnexion['connectedAt']->format('Y-m-d');
if ($dateCo == $dateNow) {
$count++;
echo $count;
}
}
}
} |
twig extension :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| <?php
namespace App\Twig;
use App\Service\DateConnexionService;
use App\Service\StatService;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
use Twig\TwigFunction;
class StatExtension extends AbstractExtension
{
public function getFilters(): array
{
return [
// If your filter generates SAFE HTML, you should add a third
// parameter: ['is_safe' => ['html']]
// Reference: https://twig.symfony.com/doc/2.x/advanced.html#automatic-escaping
new TwigFilter('filter_name', [$this, 'doSomething']),
];
}
public function getFunctions(): array
{
return [
new TwigFunction('nbrStats', [$this, 'readStats']),
new TwigFunction('nbrConnexion', [$this, 'getAllDateConnexion']),
];
}
public function readStats()
{
$statService= New StatService();
$statService->readStats();
}
public function getAllDateConnexion(){
$dateConnexionService= New DateConnexionService();
$dateConnexionService->getDateConnexion();
}
} |
La vue :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| {% extends 'admin/blog/base.html.twig' %}
{% block title %}Tableau de bord {% endblock %}
{% block body %}
<div class="container-fluid">
<div class="row">
<div class="col">
<div class="card bg-primary text-white mb-3 text-center">
<div class="card-body">
<div class="row">
<div class="col-4">
<i class="fas fa-users fa-3x"></i>
</div>
<div class="col-8">
<h4 class="card-title">{{nbrStats()}} visiteurs aujourd'hui</h4>
</div>
</div>
</div>
</div>
</div>
<div class="col">
<div class="card bg-dark text-white mb-3 text-center">
<div class="card-body">
<div class="row">
<div class="col-4">
<i class="fas fa-newspaper fa-3x"></i>
</div>
<div class="col-8">
<h4 class="card-title">{{ stats.articles }} articles publiés</h4>
</div>
</div>
</div>
</div>
</div>
<div class="col">
<div class="card bg-warning text-white mb-3 text-center">
<div class="card-body">
<div class="row">
<div class="col-4">
<i class="fas fa-registered fa-3x"></i>
</div>
<div class="col-8">
<h4 class="card-title">{{ stats.users }} inscrits en base</h4>
</div>
</div>
</div>
</div>
</div>
<div class="col">
<div class="card bg-success text-white mb-3 text-center">
<div class="card-body">
<div class="row">
<div class="col-4">
<i class="fas fa-plug fa-3x"></i>
</div>
<div class="col-8">
<h4 class="card-title"> {{nbrConnexion()}}</h4>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %} |