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.

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 : 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;
            }
        }
    }
}
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
<?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 %}