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] Fonction disponible pour tous les bundles


Sujet :

Symfony PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Responsable Informatique
    Inscrit en
    Août 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 42
    Points : 118
    Points
    118
    Par défaut [Twig] Fonction disponible pour tous les bundles
    Bonjour,

    Je sais qu'on peut créer des fonction personnalisées avec Twig.
    Mais je cherche à savoir comment on peut le faire dans Symfony2 de manière à ce que ma fonction perso soit dispo dans tous les templates de tous mes bundles.

    Quelqu'un sait-il comment faire ?

    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    @Vinorcola

    voici un article fort intéressant qui devrait t'aider (je l'ai testé avec la derniere version):

    http://www.martinsikora.com/how-to-m...n-for-symfony2 (ou en français)
    Un petit si la réponse convient. Merci.

  3. #3
    Membre régulier
    Homme Profil pro
    Responsable Informatique
    Inscrit en
    Août 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 42
    Points : 118
    Points
    118
    Par défaut
    Ok, merci bien, ça va m'aidé fortement !

    EDIT :
    Bon du coup, ya pas mal de modif à faire, mais je me retrouve bloquer : j'ai une erreur comme quoi il faut que ma class MyTwigExtension doit implémenter l'interface Twig_ExtensionInterface. Le soucis, c'est que je ne sais pas comment faire pour pouvoir utiliser l'interface.
    J'ai bien mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php class MyTwigExtension extends TwigExtension implements Twig_ExtensionInterface
    mais j'obtiens une erreur :
    Fatal error: Interface 'Acme\HelloBundle\Extension\Twig_ExtensionInterface' not found in D:\***\wamp\www\sf2\src\Acme\HelloBundle\Extension\MyTwigExtension.php on line 14

    Pourtant, dans mon fichier app/autoload.php, j'ai bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $loader->registerPrefixes(array(
        'Twig_Extensions_' => __DIR__.'/../vendor/twig-extensions/lib',
        'Twig_'            => __DIR__.'/../vendor/twig/lib',
        'Swift_'           => __DIR__.'/../vendor/swiftmailer/lib/classes',
    ));
    Donc, je ne trouve pas de solution pour le moment.

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Qu'as-tu en haut de ton fichier D:\***\wamp\www\sf2\src\Acme\HelloBundle\Extension\MyTwigExtension.php ?

    Il faut charger le namespace de la classe TwigExtension et de l'interface que tu implémentes..
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class TwigExtension extends \Twig_Extension {
    //...
    }
    Un petit si la réponse convient. Merci.

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2011
    Messages : 47
    Points : 63
    Points
    63
    Par défaut
    Attention le tag "trans" fonctionnera différent à partir de la bêta apparemment.

    {% trans "foo" %}

    ou

    {% trans foo %}

    Ne fonctionnera plus !

    Il faudra taper :

    {% trans %}foo{% endtrans %}

    ou

    {{ foo|trans }}

  7. #7
    Membre régulier
    Homme Profil pro
    Responsable Informatique
    Inscrit en
    Août 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 42
    Points : 118
    Points
    118
    Par défaut
    Ah ok, j'avais oublié ma méthode getName, c'est pour ça ! Donc du coup, ça marche bien avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extends \Twig_Extension
    . Maintenant, le soucis, c'est que je ne peux pas rajouter ma function : il m'indique une erreur : Cannot instantiate abstract class Twig_Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    public function getGlobals()
    {
        return array('showFloat' => new \Twig_Function($this, 'showFloat'));
    }
    Pourtant, c'est bien comme ça que c'est fait dans la doc : http://www.twig-project.org/doc/exte...-and-functions


    EDIT : J'ai remplacer par l'utilisation d'une fonction par celle d'un filtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    public function getGlobals()
    {
        return array('showFloat' => new \Twig_Filter_Method($this, 'showFloat'));
    }
    Mais maintenant, Symfony me signale une erreur : The filter "showFloat" does not exist

  8. #8
    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
    Tu veux créer un filtre ? Ou appeler une fonction en lui passant une variable ?
    c'est différent, tu devrais ouvrir un post pour éviter de surcharger celui-là
    Et regarde les exemples dans Acme\demobundle\twig\extension.

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2011
    Messages : 47
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par Vinorcola Voir le message

    Pourtant, c'est bien comme ça que c'est fait dans la doc : http://www.twig-project.org/doc/exte...-and-functions


    EDIT : J'ai remplacer par l'utilisation d'une fonction par celle d'un filtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    public function getGlobals()
    {
        return array('showFloat' => new \Twig_Filter_Method($this, 'showFloat'));
    }
    Mais maintenant, Symfony me signale une erreur : The filter "showFloat" does not exist
    Regarde mieux la doc, remplace getGlobals() par getFilters()

Discussions similaires

  1. Le SDK Steamworks est maintenant disponible pour tous les développeurs
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 03/06/2013, 15h59
  2. Réponses: 2
    Dernier message: 04/11/2009, 10h17
  3. Réponses: 12
    Dernier message: 29/07/2009, 16h26
  4. Réponses: 0
    Dernier message: 23/07/2009, 15h21
  5. Réponses: 0
    Dernier message: 23/07/2009, 15h21

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