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

 PHP Discussion :

Passer une variable d'un template à l'autre


Sujet :

PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 36
    Points : 26
    Points
    26
    Par défaut Passer une variable d'un template à l'autre
    Bonjour,

    J'ai un template showSuccess.php :

    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
    <?php use_javascript('jquery-1.2.6.min.js') ?>
    <?php use_javascript('script.js') ?>
    <?php include_javascripts() ?>
     
    <div id="annonce">
      
      <h1><?php echo $annonce->getUtilisateurId() ?></h1>
      <h2><?php echo $annonce->getVille() ?></h2>
      <h3>
        <?php echo $annonce->getTitreAnnonce() ?>
        <small> - <?php echo $annonce->getTypeAnnonce() ?></small>
      </h3>
    
     
      <div class="description">
        <?php echo simple_format_text($annonce->getTexteAnnonce()) ?>
      </div>
    .
    .
    .
    // LIEN MENANT VERS LE TEMPLATE CONTACTSUCCESS.PHP
    <div style="padding: 20px 0">
       <a href="<?php echo url_for('@contact'); ?>" target=wclose onclick=window.open('<?php echo url_for('@contact'); ?>','wclose','width=500,height=300,toolbar=yes,status=no,left=20,top=30')> Envoyer un mail</A>
      </div>  
    Donc j'aimerais passer la variable $annonce->getId() au template qui est définit dans contactSuccess.php.

    l'action contact :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     public function executeContact(sfWebRequest $request)
    {
       $this->setLayout(false);
       $this->emailUser=$this->getUser()->getAttribute('email');
        $q = Doctrine_Query::create() 
                           ->from('utilisateur u') 
                           ->where('u.Id=?', $this->getUser()->getAttribute('id')); 
        $this->user1 = $q->execute();        
       //$this->form3 = new ContacterForm();
     
    	  //$this->getResponse()->setSlot('form2', $this->form2 );
    }

    Merci d'avance.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Je débute donc je ne suis pas certain mais je pense à un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return $this->redirect('monApps/contact?monid=' . $this->annonce->get('id')

  3. #3
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 669
    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 669
    Points : 188 671
    Points
    188 671
    Par défaut


    Deux cas possibles :
    - soit le deuxième template est un composant, auquel cas tu pourrais stocker les valeurs dans ton objet utilisateur ;
    - soit c'est une très mauvaise idée, sauf si les données à passer ne constituent qu'un ID, une référence vers une enregistrement.

    Il suffit de passer un paramètre à ta route.

    Dans ton routing.yml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    contact: 
      url: /contact/:param1/:id
    Tu pourras faire un appel comme ça, en passant des paramètres :

    <?php echo url_for('@contact', array(''param1' => $param, 'id' => $id));
    Et tu les récupéreras comme ça dans ton action :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if($request->hasParameter('id'))
        $id = $request->getParameter('id');

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    Merci pour votre réponse. J'ai essayé comme tu m'as dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     < <a href="<?php echo url_for('@contact', array('id1' => $annonce->getUtilisateurId(), 'id2' => $annonce->getId())); ?>" target=wclose onclick=window.open('<?php echo url_for('@contact',array('id1' => $annonce->getUtilisateurId(), 'id2' => $annonce->getId())); ?>','wclose','width=500,height=300,toolbar=yes,status=no,left=20,top=30')> Envoyer un mail</A>

    Par contre mon routing est comme ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    contact:
      url: /:sf_culture/:id1
      class:   sfDoctrineRoute
      options: { model: Annonce, type: object }
      param: { module: ads, action: contact }
      requirements:
        sf_culture: (?:fr|en) 
        id: \d+
        sf_method: [get]

    J'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The "/:sf_culture/:id1" route has some missing mandatory parameters (:id1).
    Merci

    Et si je rajoute id2 :

    donc dans routing.yml : url: /:sf_culture/:id1:/id2


    J'ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    500 | Internal Server Error | Exception
    sfDoctrineRoute::serialize() must return a string or NULL

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    Je m'excuse j'ai fait une petite erreur c'est toujours la même erreur en fait :

    The "/:sf_culture/:id1/:id2" route has some missing mandatory parameters (:id1, :id2).

  6. #6
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 669
    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 669
    Points : 188 671
    Points
    188 671
    Par défaut
    Pourquoi spécifier la classe de ta route ? Pour moi, il n'y en a pas besoin (tu ne passes jamais d'objet Doctrine dans tes URL, juste des ID vers des enregistrements), un simple sfRoute (par défaut) devrait suffire.

    À y regarder de plus près, tu donnes bien un modèle, donc sfDoctrineRoute... mais tu ne passes que des ID, alors qu'il faut passer l'objet Doctrine tout entier si tu passes par cette solution-là (je n'utilise personnellement jamais sfDoctrineRoute, juste un bon vieux sfRoute avec des ID qui transitent de partout).

    J'aurais donc écrit cette route comme ça (sans oublier que ton paramètre ne s'appelle pas id mais bien id1, à modifier dans les requirements) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    contact:
      url: /:sf_culture/:id1/:id2
      param: { module: ads, action: contact }
      requirements:
        sf_culture: (?:fr|en) 
        id1: \d+
        id2: \d+
        sf_method: [get]
    Si tu veux passer par des routes Doctrine, je te suggère d'attendre que Michel passe dans le coin.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    Oui t'as raison par rapport à Doctrine, par contre j'ai toujours la même erreur sauf si je définis des valeurs par défaut dans options :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    contact:
      url: /:sf_culture/:id1/:id2
      param: { module: ads, action: contact, id1:2 , id2:1 }
      requirements:
        sf_culture: (?:fr|en) 
        id1: \d+
        id2: \d+
        sf_method: [get]
    Ça passe mais le lien contient les valeurs par défaut ,comme s'il ne récuperait pas les variables dans le template.

    Voilà le flom d'erreur :

    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
    500 | Internal Server Error | InvalidArgumentException
    The "/:sf_culture/:id1/:id2" route has some missing mandatory parameters (:id1, :id2).
     
    stack trace
    at ()
    in SF_ROOT_DIR\lib\vendor\symfony\lib\routing\sfRoute.class.php line 224 ...
    at sfRoute->generate(array(), array('path_info' => '/ads/paris/7/guemmi', 'prefix' => '/frontend_dev.php', 'method' => 'GET', 'format' => null, 'host' => 'www.addad.com.localhost', 'is_secure' => , 'request_uri' => 'http://www.addad.com.localhost/frontend_dev.php/ads/paris/7/guemmi'), array('id1' => '5', 'id2' => '7'))
    in SF_ROOT_DIR\lib\vendor\symfony\lib\routing\sfPatternRouting.class.php line 327 ...
    at sfPatternRouting->generate('contact', array(), array('id1' => '5', 'id2' => '7'))
    in SF_ROOT_DIR\lib\vendor\symfony\lib\controller\sfWebController.class.php line 74 ...
    at sfWebController->genUrl('@contact', array('id1' => '5', 'id2' => '7'))
    in SF_ROOT_DIR\lib\vendor\symfony\lib\helper\UrlHelper.php line 88 ...
    at url_for1('@contact', array('id1' => '5', 'id2' => '7'))
    in n/a line n/a ...
    at call_user_func_array('url_for1', array('@contact', array('id1' => '5', 'id2' => '7')))
    in SF_ROOT_DIR\lib\vendor\symfony\lib\helper\UrlHelper.php line 115 ...
    at url_for('@contact', array('id1' => '5', 'id2' => '7'))
    in SF_ROOT_DIR\apps\frontend\modules\ads\templates\showSuccess.php line 85 ...
    at require('C:\development\sfprojects\addad\apps\frontend\modules\ads\templates\showSuccess.php')
    in SF_ROOT_DIR\lib\vendor\symfony\lib\view\sfPHPView.class.php line 75 ...
    at sfPHPView->renderFile('C:\development\sfprojects\addad\apps\frontend\modules/ads/templates/showSuccess.php')
    in SF_ROOT_DIR\lib\vendor\symfony\lib\view\sfPHPView.class.php line 185 ...
    at sfPHPView->render()
    in SF_ROOT_DIR\lib\vendor\symfony\lib\filter\sfExecutionFilter.class.php line 155 ...
    at sfExecutionFilter->executeView('ads', 'show', 'Success', array('form2' => object('LoginForm'), 'form3' => object('ContacterForm'), 'annonce' => object('Annonce'), 'photos' => object('Doctrine_Collection')))
    in SF_ROOT_DIR\lib\vendor\symfony\lib\filter\sfExecutionFilter.class.php line 116 ...
    at sfExecutionFilter->handleView(object('sfFilterChain'), object('adsActions'), 'Success')
    in SF_ROOT_DIR\lib\vendor\symfony\lib\filter\sfExecutionFilter.class.php line 47 ...
    at sfExecutionFilter->execute(object('sfFilterChain'))
    in SF_ROOT_DIR\lib\vendor\symfony\lib\filter\sfFilterChain.class.php line 53 ...
    at sfFilterChain->execute()
    in SF_ROOT_DIR\lib\vendor\symfony\lib\filter\sfRenderingFilter.class.php line 33 ...
    y'a t-il moyen de le faire avec un POST ??

    Merci

Discussions similaires

  1. Passer une variable d'un formulaire à l'autre
    Par SangZug dans le forum IHM
    Réponses: 6
    Dernier message: 12/05/2013, 02h57
  2. Passer une variable d'un côté à un autre
    Par pierrot10 dans le forum jQuery
    Réponses: 7
    Dernier message: 23/11/2011, 15h16
  3. [Débutant] Passer une variable d'un GUI à un autre
    Par pompier21 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 28/01/2009, 10h09
  4. [Smarty] Passer une variable de la template (.tpl) à un PHP
    Par cadoudal56 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 01/07/2008, 13h25
  5. Passer une variable d'un IF à l'autre
    Par JeanMi66 dans le forum Langage
    Réponses: 3
    Dernier message: 25/06/2007, 19h03

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