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.
Le service :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
twig extension :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 twig : Sélectionner tout - Visualiser dans une fenêtre à part
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 %}
Partager