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 :

Admin generator : comment passer un attribut dans une action personnalisée ?


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 64
    Points
    64
    Par défaut Admin generator : comment passer un attribut dans une action personnalisée ?
    Bonjour,
    Dans le cadre de l'utilisation de l'admin generator, j'ai personnalisé des actions comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    object_actions: 
            validate:          { name: Valider cet article, action: validate, icon: admin/checkmark.gif } 
            locked:            { name: Locker cet article, action: lock, icon: admin/lock.gif }
    Ces actions font leur maj en bdd et redirigent directement vers la liste; j'aimerais récupérer la page courante de façon à la réafficher, car pour le moment, je retourne toujours à la page 1.
    A priori, dans la page d'appel, la variable "$pager->getCurrentPage()" contient cette information, puis-je configurer le fichier yaml pour lui passer ce paramètre lors de l'appel de mes actions?
    Je suis aussi preneur d'une autre stratégie bien sûr!
    Merci!

  2. #2
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Je ne suis pas sûr d'avoir bien compris la question.

    Cela dit, il t'es possible de pouvoir mettre du php dans ton fichier yaml.

    Ensuite, pour ton action personnalisée. Pourquoi tu ne procèdes pas l'utilisation des champs cachés.

    En gros, tu te sers au niveau du template de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo input_hidden_tag('initialUri',$initialUri)?>
    Puis dans ton action :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $uri = $this->getRequestParameter('initialUri');
    Par la suite, dans ton action, tu fais simplement :

    Cela te convient-t-il ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 64
    Points
    64
    Par défaut
    j'ai constaté qu'il était possible de passer des variables en get dans l'action appellée, tout simplement en faisant "action?var=valeur"

    mais apparemment, si j'appelle dynamiquement du PHP dans le fichier YAML pour remplir ce paramètre, avec des valeurs qui seront contenus dans le formulaire généré, ca ne marche pas: je crois que le fichier YAML est parsé avant de savoir ce qu'il y aura comme variables dans le formulaire d'arrivée.

    effectivement, je peux utiliser un champ caché, mais c'était surtout pour éviter l'avoir à trafiquer les fichiers de base du generator.

  4. #4
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Citation Envoyé par Flashball Voir le message
    j'ai constaté qu'il était possible de passer des variables en get dans l'action appellée, tout simplement en faisant "action?var=valeur"
    Il s'agit là de quelque chose de "générique". Tous les langages du WEB passent les paramètres GET de cette façon...symfony n'a rien à y voire.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 64
    Points
    64
    Par défaut
    hum, je parle de l'admin generator et de son fichier yaml "generator.yml", tu as déjà utilisé cet outil?

    ce que je voulais dire, c'est que Symfony interprète correctement le fait de passer des arguments en get dans l'action définie dans le fichier YAML, il n'y avait rien d'évident la dedans.

    pour resituer, voilà à quoi ressemble mon fichier generator.yml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    object_actions:
            validate:          { name: Valider cet article, action: validate?page=<?php echo $currentPage ?>, icon: admin/checkmark.gif }
    J'ai surchargé la méthode executeList() pour définir une valeur pour $this->currentPage, mais ca ne marche pas, je pense que c'est du au fait que le fichier soit parsé avant de connaître la valeur des attributs du template.

  6. #6
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Je le sais parce que je me suis tapé tout le livre

    Citation Envoyé par Flashball Voir le message
    hum, je parle de l'admin generator et de son fichier yaml "generator.yml", tu as déjà utilisé cet outil?

    ce que je voulais dire, c'est que Symfony interprète correctement le fait de passer des arguments en get dans l'action définie dans le fichier YAML, il n'y avait rien d'évident la dedans.
    Exemple :

    http://www.symfony-project.org/book/...guring-Symfony
    Listing 5-21
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    all:
      translation:
        format:  <?php echo (sfConfig::get('sf_i18n') == true ? 'xliff' : 'none')."\n" ?>
    Si tu veux le "détail", le code php que tu inclus est traité par le processeur PHP qui remplace dynamiquement la valeur donc symfony ne touche pas à cà...(cà inclut donc logiquement la syntaxe de GET)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 64
    Points
    64
    Par défaut
    l'exemple que tu cites consiste à utiliser du code PHP dans un fichier YAML pour aller récupérer une valeur contenue dans un fichier de configuration. Dans ce cas, effectivement, ca marche.

    Je cherche pour ma part à récupérer une valeur contenue dans le formulaire "d'arrivée" à la suite de l'action. Et là, ca ne marche pas, Symfony parsant ce fichier YAML avant de connaître la valeur de cet attribut en question.

    En revanche, Symfony prévoit quand même la possibilité de manipuler des données issues des objets qu'il traite au niveau du generator dans le fichier YAML, par exemple en permettant d'afficher le titre (syntaxe %%title%% dans le fichier YAML). J'imagine donc qu'il doit y avoir une solution à ce problème, mais j'ai bien peur qu'il me faille faire des retouches au niveau des classes générant le code du Validator, donc à un niveau un peu trop "bas" pour moi!

    Concernant ce problème, j'ai finalement opté la stratégie suivante:
    1/ au niveau de l'affichage de la liste, définition d'un partial dans le fichier generator.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    display:    [title, etc., _action]
    2/ dans le partial _action.php, je définis un appel à mes actions "personnalisées", en passant notamment le numéro de la page:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php 
    $currentPage = $sf_flash->get('page');
    echo link_to(image_tag('admin/checkmark.gif'),  'adminarticle/validate?id='.$article->getId().'&page='.$currentPage);
    ?>
    &nbsp;&nbsp;
    <?php
    echo link_to(image_tag('admin/lock.gif'),  'adminarticle/lock?id='.$article->getId().'&page='.$currentPage); 
    ?>
    3/ je surcharge la méthode executeList pour récupérer la page courante et je met cet attribut en session flash:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	public function executeList() {
    		parent::executeList();
     
    		$this->setFlash('page', $currentPage);
    	}
    4/ au niveau de mes actions "personnalisées", je forward vers la méthode list qui récupérera bien l'attribut page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->forward('adminarticle', 'list');
    l'utilisation d'un champ caché m'aurait obligé à modifier les templates de base du generator, et ca n'en vaut pas la peine.

    enfin dernière info, symfony ne gère lui-même pas ces histoires de retour à la page courante de la liste pour les actions qu'il propose par défaut sur les objets d'une liste, comme l'action "_delete" par exemple.

    j'espère que tout ceci pourra servir à ceux qui trafique avec leur admin generator!
    merci à toi et surtout aux membres de la "ml google symfony france"!

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 64
    Points
    64
    Par défaut
    et sinon, on peut faire remplacer tout çà en une seule commande...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $referer = $this->getRequest()->getReferer() ? $this->getRequest()->getReferer() : 'adminarticle/list'; 
    $this->redirect($referer);

Discussions similaires

  1. comment utiliser un attribut dans une requete ?
    Par lucaazori1988 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 28/12/2009, 11h52
  2. Comment passer un argument dans une fonction
    Par DeezerD dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 22/01/2008, 18h13
  3. Réponses: 5
    Dernier message: 03/07/2007, 10h31
  4. Réponses: 2
    Dernier message: 11/10/2006, 13h37

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