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

Zend Framework PHP Discussion :

problème de récupération id URl dans la partie form [ZF 1.9]


Sujet :

Zend Framework PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 55
    Points : 46
    Points
    46
    Par défaut problème de récupération id URl dans la partie form
    Bien le bonjour mon souci et que je peut bel est bien récupérer id d'une url http://localhost/site/modifier/id/2 dans mon cas je récupère 2 dans la partie controlleur mais je veut récupérer cette valeur dans la partie form.


    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <?php
    class Form_siteForm extends Zend_Form
    {
    	public function __construct($options = null)
    	{
    		parent::__construct($options);
    		$this->setName('site');
     
    		$id = new Zend_Form_Element_Hidden('id');
    		$nom_site = new Zend_Form_Element_Text('nom_site');
    		$nom_site->setLabel('nom_site')
    			->setRequired(true)
    			->addFilter('StripTags')
    			->addFilter('StringTrim')
    			->addValidator('NotEmpty');
     
    		$dbSallesdesSites = new Model_DbTable_SallesDesSites();
    		//$SallesdesSite = $dbSallesdesSites->getDefaultAdapter()->fetchAll('SELECT idSalle FROM salle,site,sallesdessites WHERE site.id=sallesdessites.idSite and salle.id=sallesdessites.idSalle and site.id='.$id);
     
     
    		$dbSalle = new Model_DbTable_Salle();
    		$liste_dbSalle = $dbSalle->fetchAll();
    		foreach ($liste_dbSalle as $dbSalle) {
    			$salleTab[$dbSalle->id] = $dbSalle->nom_salle;
    		}
    		$salle = new Zend_Form_Element_MultiCheckbox('idSalle');
    		$salle->setLabel('Salle')
    			->setMultiOptions($salleTab)
    			->setRequired(true)
    			->addFilter('StripTags')
    			->addFilter('StringTrim')
    			->addValidator('NotEmpty');
     
     
    		$description = new Zend_Form_Element_Text('description');
    		$description->setLabel('description')
    			->setRequired(true)
    			->addFilter('StripTags')
    			->addFilter('StringTrim')
    			->addValidator('NotEmpty');
     
    		$submit = new Zend_Form_Element_Submit('submit');
    		$submit->setAttrib('id', 'submitbutton');
     
    		$this->addElements(array($id, $nom_site, $salle, $description, $submit));
    	}
    }

    Mon but étant de récupérer certain information de la base de donnée afin de coché certain case par défaut de la Zend_Form_Element_MultiCheckbox quand des salles appartienne déjà à un site tout ce qui est du type $this->_request ne fonctionne pas car il ne connais pas.


    Merci d'avance et bonne journée.

  2. #2
    Membre actif Avatar de buse974
    Homme Profil pro
    Développeur / Chef de projet informatique
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur / Chef de projet informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 245
    Points
    245
    Par défaut
    Salut
    Donc aparament ton formulaire est instancier à controleur => site , action => modifier

    dans modifier tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $form = new Form_siteForm(); // instanciation du formulaire
    $mon_id = $this->_request->getPost('id'); // recupe de l'id => 2
     
    $form->setDefault("id",$mon_id); // tu envoye la valeur de ton id a ton formulaire setDefault($name, $value)
     
    $this->view->tonfrom = $form;
    Donc si j'ai bien compris ton probleme, tu as juste besoin de la methode setDefault($name, $value).

  3. #3
    darthmower
    Invité(e)
    Par défaut
    Bonjour,

    Sinon tu le passes au constructeur de ton formulaire lors de son instanciation dans le controller.

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    <?php
    class Form_siteForm extends Zend_Form
    {
    	public function __construct$idTruc, $options = null)
    	{
    		parent::__construct($options);
    		$this->setName('site');
     
                    //utilisation de $idTruc ou tu veux :D
     
    		$id = new Zend_Form_Element_Hidden('id');
    		$nom_site = new Zend_Form_Element_Text('nom_site');
    		$nom_site->setLabel('nom_site')
    			->setRequired(true)
    			->addFilter('StripTags')
    			->addFilter('StringTrim')
    			->addValidator('NotEmpty');
     
    		$dbSallesdesSites = new Model_DbTable_SallesDesSites();
    		//$SallesdesSite = $dbSallesdesSites->getDefaultAdapter()->fetchAll('SELECT idSalle FROM salle,site,sallesdessites WHERE site.id=sallesdessites.idSite and salle.id=sallesdessites.idSalle and site.id='.$id);
     
     
    		$dbSalle = new Model_DbTable_Salle();
    		$liste_dbSalle = $dbSalle->fetchAll();
    		foreach ($liste_dbSalle as $dbSalle) {
    			$salleTab[$dbSalle->id] = $dbSalle->nom_salle;
    		}
    		$salle = new Zend_Form_Element_MultiCheckbox('idSalle');
    		$salle->setLabel('Salle')
    			->setMultiOptions($salleTab)
    			->setRequired(true)
    			->addFilter('StripTags')
    			->addFilter('StringTrim')
    			->addValidator('NotEmpty');
     
     
    		$description = new Zend_Form_Element_Text('description');
    		$description->setLabel('description')
    			->setRequired(true)
    			->addFilter('StripTags')
    			->addFilter('StringTrim')
    			->addValidator('NotEmpty');
     
    		$submit = new Zend_Form_Element_Submit('submit');
    		$submit->setAttrib('id', 'submitbutton');
     
    		$this->addElements(array($id, $nom_site, $salle, $description, $submit));
    	}
    }
    dans le controller:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    //... recuperation de l'id via le request
     
    $form = new Form_siteForm($id); // instanciation du formulaire
    $this->view->tonform = $form;
    ?>

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 55
    Points : 46
    Points
    46
    Par défaut
    je suis un peu perdu par vos réponses.

    sur index
    la page est juste appelé comme suis <a href="<?php echo $this->url(array('controller'=>'site', 'action'=>'modifier', 'id'=>$site->id));?>">Modifier</a>

    et je n'ai que ca sur ma page modifier.phtml
    <?php echo $this->form ;?>


    en espérant bien avoir compris la logique et qu'on appel bien modifier.phtml

    comme c'est appelé via $this->form je pense qu'on arrive directement dans la parti form et non la parti controller.
    C'est pourquoi je ne sais ou même votre code.



    edit : voici mon controller.
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    <?php
    /**
     * Index controller
     *
     * Default controller for this application.
     * 
     * @uses       Zend_Controller_Action
     * @package    QuickStart
     * @subpackage Controller
     */
    class SiteController extends Zend_Controller_Action {
        /**
         * The "index" action is the default action for all controllers -- the
         * landing page of the site.
         *
         * Assuming the default route and default router, this action is dispatched
         * via the following urls:
         * - /
         * - /index/
         * - /index/index
         *
         * @return void
         */
    	public function indexAction() {
    		$this->view->title = "Liste des salles d'un site";
    		$dbSite = new Model_DbTable_Site();
    		$this->view->sites = $dbSite->fetchAll();
    		$i = 0;
    		$dbSallesdesSites = new Model_DbTable_SallesDesSites();
    		foreach($this->view->sites as $sallesdessites) {
    			$SallesdesSite[] = $dbSallesdesSites->getDefaultAdapter()->fetchAll('SELECT nom_salle,site.id FROM salle,site,sallesdessites WHERE site.id=sallesdessites.idSite and salle.id=sallesdessites.idSalle and site.id='.$sallesdessites->id);
    			$i++;
    		}
    		$this->view->SallesDesSites = $SallesdesSite;
     
    	}
     
    	function ajouterAction() {
    		$this->view->title = "Ajouter une nouveau site";
    		$form = new Form_siteForm();
    		$form->submit->setLabel('Ajouter');
    		$this->view->form = $form;
    		if ($this->_request->isPost()) {
    			$formData = $this->_request->getPost();
    			if ($form->isValid($formData)) {
    				$dbsite = new Model_DbTable_site();
    				$row = $dbsite->createRow();
    				$row->nom_site = $form->getValue('nom_site');
    				$row->description = $form->getValue('description');
    				$row->save();
    				$this->_redirect('/site');
    			} else {
    				$form->populate($formData);
    			}
    		}
    	}
     
    	function modifierAction() {
    		$this->view->title = "Modifier les informations du site";
    		$form = new Form_siteForm();
    		$form->submit->setLabel('Enregistrer');
    		$this->view->form = $form;
    		if ($this->_request->isPost()) {
    			$formData = $this->_request->getPost();
    			if ($form->isValid($formData)) {
    				$id = (int)$form->getValue('id');
    				$dbsallesdessites = new Model_DbTable_SallesDesSites();
    				$where = 'idSite = '.$id;
    				$dbsallesdessites->delete($where);
    				$sallesdessites=$form->getValue('idSalle');
    				for($i=0; $i<count($sallesdessites);$i++){
    					$row = $dbsallesdessites->createRow();
    					$row->idSite = $id;
    					$row->idSalle = $sallesdessites[$i];
    					$row->save();
    				}
    				$dbsite = new Model_DbTable_site();
    				$row = $dbsite->fetchRow('id='.$id);
    				$row->nom_site = $form->getValue('nom_site');
    				$row->description = $form->getValue('description');
    				$row->save();
    				$this->_redirect('/site');
    			} else {
    				$form->populate($formData);
    			}
    		} else {
    			// L'id de la site est attendu dans $params['id']
    			$id = (int)$this->_request->getParam('id', 0);
    			if ($id > 0) {
    				$dbsite = new Model_DbTable_site();
    				$row = $dbsite->fetchRow('id='.$id);
    				$form->populate($row->toArray());
    			}
    		}
    	}
     
    	function supprimerAction() {
    		$this->view->title = "Supprimer ce site";
    		if ($this->_request->isPost()) {
    			$id = (int)$this->_request->getPost('id');
    			$del = $this->_request->getPost('del');
    			if ($del == 'Oui' && $id > 0) {
    				$dbReservation = new Model_DbTable_Reservation();
    				$where = 'site_id = '.$id;
    				$dbReservation->delete($where);
    				$dbsite = new Model_DbTable_site();
    				$where = 'id = '.$id;
    				$dbsite->delete($where);
    			}
    			$this->_redirect('/site');
    		} else {
    			$id = (int)$this->_request->getParam('id');
    			if ($id > 0) {
    				$dbsite = new Model_DbTable_site();
    				$this->view->site = $dbsite->fetchRow('id='.$id);
    			}
    		}
    	}
    }

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 55
    Points : 46
    Points
    46
    Par défaut
    @darthmower j'avais déjà essayer cette solution et j'ai réessayer pour être sur mais rien, la valeur retourner dans mon form est Null et comme dit dans mon post au dessus, je en suis même pas certain de passer par le controler à ce moment la.

    je pense entrer dans le controller et notamment la fonction function modifierAction() une fois appuyer sur le bouton enregistrer mais pas avant.


    En tout cas merci pour votre coup de main, je suis actuellement en auto-formation sur zend et reprend une petit application pour gérer et réserver des salles par utilisateur auquel on me demande d'ajouter des sites(ensemble de salle). histoire de voir un peu les entrailles de zend sauf que personne ne connais zend la personne ayant fait le début n'ai plus la et de toute façon quand elle y été encore ne connaissais pas + que moi


    Encore merci à la comunauté une fois de + je reste toujours émerveillié devant tant de volontarisme sur les forum.

  6. #6
    darthmower
    Invité(e)
    Par défaut
    Je le fais moi même et tu passes par ton controller obligatoirement sinon comment il saurait quel formulaire afficher ...

    Apparament tu utilises la même class de formulaire pour toutes tes actions, fait attention à ne pas te tromper d'endroit, de près remplir dans le constructeur par un id null et de le tester pour les cas où tu n'en as pas besoin ou de faire un autre formulaire spécifique.

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 55
    Points : 46
    Points
    46
    Par défaut
    je passe par quel endroit du controleur? dans modifierAction()?

    j'ai essayer mais ca ne marche pas puisque de toute facon il me semble que cette fonction n'ai appelé que une fois le bonton enregistré cliqué.


    Je suis un peu perdu a vrai dire si on n'apple pas directement form, je ne sais pas ou ca pasdse

  8. #8
    darthmower
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="<?php echo $this->url(array('controller'=>'site', 'action'=>'modifier', 'id'=>$site->id));?>">Modifier</a>
    Oui tu passes par modifierAction:

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    <?php
    function modifierAction()
    {
    		$idGet = $this->_request->getParam('id');
     
                    $this->view->title = "Modifier les informations du site";
    		$form = new Form_siteForm($idGet);
    		$form->submit->setLabel('Enregistrer');
    		$this->view->form = $form;
    		if ($this->_request->isPost()) {
    			$formData = $this->_request->getPost();
    			if ($form->isValid($formData)) {
    				$id = (int)$form->getValue('id');
    				$dbsallesdessites = new Model_DbTable_SallesDesSites();
    				$where = 'idSite = '.$id;
    				$dbsallesdessites->delete($where);
    				$sallesdessites=$form->getValue('idSalle');
    				for($i=0; $i<count($sallesdessites);$i++){
    					$row = $dbsallesdessites->createRow();
    					$row->idSite = $id;
    					$row->idSalle = $sallesdessites[$i];
    					$row->save();
    				}
    				$dbsite = new Model_DbTable_site();
    				$row = $dbsite->fetchRow('id='.$id);
    				$row->nom_site = $form->getValue('nom_site');
    				$row->description = $form->getValue('description');
    				$row->save();
    				$this->_redirect('/site');
    			} else {
    				$form->populate($formData);
    			}
    		} else {
    			// L'id de la site est attendu dans $params['id']
    			$id = (int)$this->_request->getParam('id', 0);
    			if ($id > 0) {
    				$dbsite = new Model_DbTable_site();
    				$row = $dbsite->fetchRow('id='.$id);
    				$form->populate($row->toArray());
    			}
    		}
    	}
     
    ?
    C'est quelque chose dans ce goût là.

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 55
    Points : 46
    Points
    46
    Par défaut
    Tres bien merci beaucoup, j'ai trouvé mon erreur ja'i fait $this->_request->getPost('id'); comme je l'ai vu dans la réponsse de buse974 au lieu de $this->_request->getParam('id');


    Merc ibeaucoup à tous les 2 et bonne fin de journée.

  10. #10
    darthmower
    Invité(e)
    Par défaut
    Pense à mettre résolu

  11. #11
    Membre actif Avatar de buse974
    Homme Profil pro
    Développeur / Chef de projet informatique
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur / Chef de projet informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 245
    Points
    245
    Par défaut
    Tres bien merci beaucoup, j'ai trouvé mon erreur ja'i fait $this->_request->getPost('id'); comme je l'ai vu dans la réponsse de buse974 au lieu de $this->_request->getParam('id');
    Désoler j'ai copier coller un bout de mon code.

    bonne continuation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [1.x] Problème de récupèration d'id dans le class form
    Par amalec78 dans le forum Symfony
    Réponses: 7
    Dernier message: 07/05/2011, 11h37
  2. [WebForms]Problème de récupération de valeur dans GridView
    Par Dadou74 dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 05/12/2006, 15h47
  3. [MySQL] Problème de récupération des données dans une fonction
    Par highman dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/10/2006, 20h04
  4. Problème de récupération de tableau dans hash DBM
    Par siaoly dans le forum Langage
    Réponses: 1
    Dernier message: 01/05/2006, 16h00
  5. Problème de récupérations de données dans une table mysql
    Par Helpine dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 09/03/2006, 19h07

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