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] Créer une extension [Tutoriel]


Sujet :

Symfony PHP

  1. #1
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 585
    Points
    188 585
    Par défaut [Twig] Créer une extension
    On peut vouloir créer une extension Twig pour de nombreuses raisons, comme la volonté de factoriser du code ou de réaliser des choses qui ne sont pas possibles de base (surligner du texte alors que le filtre n'existe pas de base dans Twig, définir un nouveau format pour l'affichage des dates, etc.). C'est ce que nous allons faire ici.

    Créer une extension pour Twig
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  2. #2
    Membre actif

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2008
    Messages : 186
    Points : 234
    Points
    234
    Par défaut
    Intéressant comme article, il manquerait juste à ajouter les Helpers, mais ça alourdirait la compréhension peut-être..

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Une petite correction car cela m'a posé quelques soucis :
    Dans la partie IV-B. Filtres on peut confondre fonction et méthode
    L'exemple suivant ne fonctionnera que pour le filtre 'date', les filtre 'datebis' et 'fluo' lèverons une exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        public function getFilters()
        {
            return array(
                'date' => new Twig_Filter_Function('date'),
                'datebis' => new Twig_Filter_Function($this, 'date'),
                'fluo' => new Twig_Filter_Function($this, 'fluo'),
            );
        }
    'date' et 'fluo' de $this sont des méthodes de la classe courante et non une fonction, il faut donc faire appel à la classe adaptée : Twig_Filter_Method
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        public function getFilters()
        {
            return array(
                'date' => new \Twig_Filter_Function('date'),
                'datebis' => new \Twig_Filter_Method($this, 'date'),
                'fluo' => new \Twig_Filter_Method($this, 'fluo'),
            );
        }
    Avec, en sus, le backslash \ pour se positionner à la racine de notre librairie Twig.
    Malgré ces petites erreurs, merci pour le tuto

  4. #4
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Points : 48
    Points
    48
    Par défaut
    Bonjour,

    merci pour ce tuto, cependant je bloque pour implémenter la fonction file_exists,

    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
     
    namespace Agp\ProjectBundle\DependencyInjection;
     
    use Symfony\Component\DependencyInjection\ContainerBuilder;
    use Symfony\Component\Config\FileLocator;
    use Symfony\Component\HttpKernel\DependencyInjection\Extension;
    use Symfony\Component\DependencyInjection\Loader;
    use Symfony\Component\DependencyInjection\Definition;
     
    /**
     * This is the class that loads and manages your bundle configuration
     *
     * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
     */
    class AgpProjectExtension extends Extension
    {
        /**
         * {@inheritDoc}
         */
        public function load(array $configs, ContainerBuilder $container)
        {	
    	$definition = new Definition('Agp\ProjectBundle\Extension\MyTwigExtension');
            $definition->addTag('twig.extension'); 
            $container->setDefinition('my_twig_extension', $definition);  
        }
    }
    et mon 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
     
    <?php 
    namespace Agp\ProjectBundle\Extension;
     
    use Symfony\Component\HttpKernel\KernelInterface;
    use Symfony\Bundle\TwigBundle\Loader\FilesystemLoader;
    class MyTwigExtension extends \Twig_Extension {
     
     
        public function getFilters() {
            return array(
                'file_ex'   => new \Twig_Filter_Function('file_exists'), 
            );
        }
     
        public function getName()
        {
            return 'my_twig_extension';
        }
    }
    et lorsque je fais dans mon template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     {% if file_ex(url) %} true {% else %} false {% endif %}
    j'ai le droit à :

    The function "file_ex" does not exist in {} at line 26
    500 Internal Server Error - Twig_Error_Syntax


    Si quelqu'un voit ce que j'ai loupé =/

    merci d'avance

Discussions similaires

  1. comment créer une extension propriétaire
    Par williamkwr dans le forum Débuter
    Réponses: 3
    Dernier message: 15/06/2008, 08h01
  2. comment créer une extension sur Mozilla
    Par timtima dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 17/02/2008, 19h57
  3. Créer une extension de fichier
    Par GodGives dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 12/11/2007, 08h44
  4. Comment créer une extension.
    Par argon dans le forum C
    Réponses: 17
    Dernier message: 08/11/2006, 22h40

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