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 :

[template] if($sf_user->hasCredential()) ne fonctionne pas


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Par défaut [template] if($sf_user->hasCredential()) ne fonctionne pas
    Bonjour,
    Sur ma page, je voulais afficher le lien pour écrire une news si seulement l'utilisateur a cette permission. J'ai donc fait ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php if($sf_user->hasCredential('publier')):?>
    <p><a href="/article/publierarticle">Publier un article</a></p>
    <?php endif ?>
    Mais le lien ne s'affiche pas quand même l'utilisateur s'est identifié et qu'il a les droit.
    Toutefois, l'action publierarticle sur lequel ce credential est placé devient accessible. Elle ne l'est pas si on n'est pas connecté et qu'on n'a pas les droits. Qu'est-ce qui ne va pas ?

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Peux-tu éditer ton premier message pour préciser la version ?

    Je te suppose travailler dans le template. Tu pars d'une variable $sf-user qui doit, a priori, être initialisé dans le contrôleur, comment l'as-tu initialisée ?


    Accessoirement, tu affiches un lien "a la mano", je te recommande fortement d'utiliser la fonction link_to de symfony et une route que tu auras au préalable définie dans le fichier route.yml. Ceci te donne beaucoup plus de liberté pour faire évoluer ton application.

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Par défaut
    Euh, je suis surpris. Je suis dans un template et je n'ai rien initialisé dans le controller. L'objet sfUser ne fait-il pas partie des objets automatiquement disponibles, accessible dans les actions par $this->getUser() et dans les templates par $sf_User ?

    Accessoirement, je corrigerai le lien "à la mano". Merci.

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Dans la version 1.0 je crois oui.

    Mais plus depuis.

    Le mieux est de mettre dans le contrôleur un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->user = $this->getUser()
    Et dans le template tu y a accès par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php if( $user->hasCredential('publier') ):?>

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 212
    Par défaut
    Oui et quand tu veux gérer ceci dans le layout global ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    $this->user = $this->getUser()
    tu le mets dans quoi ?

  6. #6
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Tu as, pour accéder aux objets du contexte deux possibilités.

    La plus propre consiste à passer par un module. Dans la couche contrôleur du module tu récupères les données, dans la couche template du module, tu les utilises pour l'affichage. Ceci ne peut marcher que si tes données sont regroupées géographiquement.

    Deuxième possibilité, récupérer l'objet user dans le template, c'est pas très propre, mais c'est réalisable. Pour cela, tu va utiliser l'objet sfContext
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php $user = sfContext::getInstance()->getUser() ?>
    tu récupère donc une instance de l'objet utilisateur pour le contexte courant, prête à l'emploi. Ca marche, mais sémantiquement, c'est moins propre.

Discussions similaires

  1. [Joomla!] Les templates s'installent mais ne fonctionnent pas
    Par netah25 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 29/12/2008, 17h53
  2. Meta-Template: pourquoi ca ne fonctionne pas?
    Par Kurisu dans le forum C++
    Réponses: 10
    Dernier message: 29/09/2008, 21h07
  3. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04
  4. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

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