IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Symfony PHP Discussion :

Twig et symfony [4.x]


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Clavardeur en tout genre
    Inscrit en
    Août 2019
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Clavardeur en tout genre

    Informations forums :
    Inscription : Août 2019
    Messages : 64
    Par défaut Twig et symfony
    Bonjour,

    j'ai crée un StatsService, je souhaiterai afficher le résultat de la fonction dans Twig, par exemple : {% readStats() %}. Cependant j'ai essayé divers méthodes mais rien n'abouti, pouvez m'éclairer sur le sujet? Merci d'avance.

    Le statsService :

    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
    <?php
     
    namespace App\Service;
     
    use Twig\TwigFilter;
     
    class StatService
    {
        public function getStats()
        {
     
            $ip=fopen('last_ip.txt', 'c+');
            $check=fgets($ip);
     
            $file=fopen('counter.txt', 'c+');
            $count=intval(fgets($file));
     
            //si l'ip du dernier visiteur est différent on incrémente de 1
            if($_SERVER['REMOTE_ADDR'] !=$check){
                fclose($ip);
     
                //w+ = ecrase les données dans le fichier
                $ip=fopen('last_ip.txt', 'w+');
     
                fputs($ip, $_SERVER['REMOTE_ADDR']);
     
                $count++;
                fseek($file,0);
                fputs($file,$count);
     
            }
            fclose($file);
            fclose($ip);
     
        }
     
        public function readStats(){
            $filename="C:\Blog\Axo\public\counter.txt";
           $handle=fopen($filename,'r');
           $contents=fread($handle,filesize($filename));
           fclose($handle);
           echo $contents;
           return $contents;
     
     
        }
    }

    ensuite 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
    {% 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">{%readStats()%}</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</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">xxx connexions</h4>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
     
    {% endblock %}

  2. #2
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Par défaut
    Salut,

    À mon avis tu vas devoir créer une extension Twig, et si ton objectif est uniquement d'afficher quelque chose tu l'utiliseras plutôt avec la syntaxe {{ myStats }}

    Il existe une commande qui permet de créer le squelette : php bin/console make:twig-extension
    Ensuite dans le fichier généré, tu vas définir dans getFunctions() le nom qu'aura la fonction dans Twig et la fonction PHP à exécuter (voir les exemples de la doc à ce sujet : https://symfony.com/doc/current/temp...xtension-class).
    Donc soit tu déplaces ton StatsServices directement dans ton extension (en recopiant les méthodes readStats et getStats dans la classe, soit tu injectes ton service dans le constructeur de l'extension).

    Normalement c'est tout ce qu'il y a à faire car Symfony devrait enregistrer l'extension comme un service et ajouter le tag twig.extension automatiquement. La seule réflexion restante concerne l'optimisation du chargement des extensions Twig pour éventuellement faire en sorte que ton extension ne soit chargée que lorsque le template courante l'utilise : https://symfony.com/doc/current/temp...wig-extensions

  3. #3
    Membre confirmé
    Homme Profil pro
    Clavardeur en tout genre
    Inscrit en
    Août 2019
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Clavardeur en tout genre

    Informations forums :
    Inscription : Août 2019
    Messages : 64
    Par défaut
    Encore une fois merci pour ta réponse Thomas, ton explication m'a permis de bien comprendre et j'ai donc procédé comme suit :
    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
    <?php
     
    namespace App\Twig;
     
    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('StatsRead', [$this, 'readStats']),
            ];
        }
     
        public function readStats()
        {
            $statService= New StatService();
            $statService->readStats();
        }
    }
    Pour ensuite appeler la fonction readStats dans Twig.
    Merci encore !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Apprendre le moteur de templates Twig dans Symfony
    Par dukoid dans le forum Symfony
    Réponses: 0
    Dernier message: 02/04/2016, 23h02
  2. [Twig] Sans Symfony $_SESSION
    Par Swarovski dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 03/02/2016, 22h37
  3. Réponses: 3
    Dernier message: 25/07/2015, 19h22
  4. [1.x] Twig sans Symfony et page d'erreur (404)
    Par lapaupiette dans le forum Symfony
    Réponses: 2
    Dernier message: 23/12/2011, 11h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo