Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 PHP Discussion :

Service dans Twig extension


Sujet :

PHP

  1. #1
    Nouveau membre du Club
    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.

    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 %}

  2. #2
    Membre confirmé
    Salut,

    L'erreur indique qu'il manque un paramètre (de type ObjectManager) quand tu instancies un DateConnexionService dans StatExtension.php ligne 39.