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 :

Question d'optimisation de code


Sujet :

Zend Framework PHP

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 55
    Par défaut Question d'optimisation de code
    Tout d'abord bien le bonjour à la communauté .

    Bon pour le petit topo je suis actuellement en auto-formation sur zend framework et à ce titre on ma demandé de récupérer une appli existante et d'y faire des ajouts.

    Seulement voilà l'appli existante à été faite par quelqu'un étant également en auto-formation juste avant moi.

    La ou je veut en venir? mon appli tourne mais je ne suis pas certain que mon code sois des plus propre et respect la philosophie de zend.

    Donc l'appli en elle même sert a créer des réservations de salle, pour ce faire on à des salles, des utilisateurs....

    Et moi j'ai créer des sites qui sont un ensemble de salles.
    Niveau base de donné j'ai donc mais salles éxistante, une nouvel table site et une table sallesdessites(oui c'est bien moche je ne sais pas par quoi le remplacer).

    Et enfin j'ai codé en feusant un copier coller des réservations puis ajusté mon code pour pouvoir afficher l'ensemble des salles d'un site et pourvoir les modifier, ma dernier tache a été de présélectionner dans la multichecbox les salles d'un site que l'on souhaite modifier.

    passons donc au code :

    View/index.phtml
    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
    <p><a href="<?php echo $this->url(array('controller'=>'', 'action'=>''), 'default', true); ?>">Page d'accueil</a></p>
    <p><a href="<?php echo $this->url(array('controller'=>'site', 'action'=>'ajouter')); ?>">Ajouter un nouveau site</a></p>
    <table>
    	<thead>
    		<tr>
    			<th><?php echo 'Nom'; ?></th>
    			<th><?php echo 'Description'; ?></th>
    			<th>&nbsp;</th>
    			<th>&nbsp;</th>
    		</tr>
    	</thead>
    	<tbody>
    		<?php
    		$i = 0;
    		foreach($this->sites as $site) {
    		?>
    		<tr class="<?php echo($i % 2 == 0 ? 'pair' : 'impair'); ?>">
    			<td><?php echo $site->nom_site;?></td>
    			<td><?php echo $site->description;?></td>
    			<td>
    		<?php
    		$j=0;
    		foreach($this->SallesDesSites[$i] as $sallesdessites) {
    		?>
    			<?php echo $sallesdessites['nom_salle'].'/'; ?>
    			</br>
    		<?php
    		$j++;
    		}
    		?></td>
    		  <td>
    				<a href="<?php echo $this->url(array('controller'=>'site', 'action'=>'modifier', 'id'=>$site->id));?>">Modifier</a>
    				<a href="<?php echo $this->url(array('controller'=>'site', 'action'=>'supprimer', 'id'=>$site->id));?>">Supprimer</a>
    			</td>
    		</tr>
    		<?php 
    			$i ++;
    		}
    		?>
    	</tbody>
    </table>

    view/modifier.phtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php echo $this->form ;?>
     
    <p><a href="<?php echo $this->url(array('controller'=>'site', 'action'=>'index')); ?>">Annuler et retour Ã* la gestion des sites</a></p>

    model/dbtable/sallesdessites.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
    <?php
     
    /**
     * Reservation table data gateway
     *
     * @uses       Zend_Db_Table
     * @package    QuickStart
     * @subpackage Model
     */
    class Model_DbTable_SallesDesSites extends Zend_Db_Table_Abstract
    {
    	protected $_name = 'sallesdessites';
    	protected $_primary = 'id';
     
    	protected $_referenceMap = array(
    		'Site' => array('columns'  => 'idSite', 'refTableClass' => 'Model_DbTable_Site'),
    		'Salle' => array('columns' => 'idSalle', 'refTableClass' => 'Model_DbTable_Salle')
    	);
    }
    models/dbtable/site.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
    <?php
     
    /**
     * Salle table data gateway
     *
     * @uses       Zend_Db_Table
     * @package    QuickStart
     * @subpackage Model
     */
    class Model_DbTable_Site extends Zend_Db_Table {
    	protected $_name = 'site';
    	protected $_primary = 'id';
     
    	protected $_referenceMap = array(
    		'sallesdessites' => array('columns' => 'id', 'refTableClass' => 'Model_DbTable_sallesdessites')
    	);
    }

    form/Siteform.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
    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
    <?php
    class Form_siteForm extends Zend_Form
    {
    	public function __construct($identifiant,$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='.$identifiant);;
    		foreach($SallesdesSite as $salleSitte)
    		{
    			$salleSites[] = $salleSitte['idSalle'];
    		}
     
    		$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')
    		    ->setValue($salleSites)
    			->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));
    	}
    }

    controller/siteController.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
    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
    120
    <?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";
    		$identifiant = $this->_request->getParam('id');
    		$form = new Form_siteForm($identifiant);
    		$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);
    			}
    		}
    	}
    }


    Voilà désolé des pavé et je sais que la démarche n'ai pas habituel mais mon bute est d'apprendre zend framework et non pas mon cantonné à faire tourner une appli qui serais mal codé.


    Je vous en remerci d'avance bonne journée et bonne lecture

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 55
    Par défaut
    Bonjour je me permet de faire un up du sujet.
    Bonne journée.

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 55
    Par défaut
    Voilà j'ai + ou moins fini de codé mon appli et je reviens vers vous en espérant y trouver de sage conceil sur la manière la plus propre de coder avec zend framework.

    Merci.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 68
    Par défaut
    Bonjour,

    J'ai parcouru rapidement ton code et en règle générale la "philosophie" du Zend Framework est bien respecter.

    Sauf dans siteController:

    Dans ta function indexAction() tu met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $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);
    }
    C'est pas très propre.
    Tu devrais créer une function dans ton model Model_DbTable _SallesDesSites et dans cette fonction exécuter ta requête avec Zend_db_Select

    Par exemple tu crée une fonction comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public function get_result($saleid) {
    	$select = $this->select()->from(array("n_s" => "nom_salle"), null)
    						     ->join(array("s" => "site"), "s.id=sds.idSite")
    						     ->join(array("sds" => "sallesdessites"), "s.id=sds.idSalle")
    						     ->where("s.id = ?", (int)$saleid);
    	return $this->fetchAll($select);
    }

  5. #5
    Membre émérite
    Avatar de Dia_FR
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2006
    Messages : 512
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <th><?php echo 'Nom'; ?></th>
    pourquoi faire compliqué ?
    ----------

    SallesDesSites référence Site et Salle => j'en comprends que c'est une table de jointure n-m
    Site référence SallesDesSites => ... ça serait pas plutôt SallesDesSites dépenend de Site ? utilisation de depdentTable
    ça peut aussi être moi qui ai pas compris c'que tu veux faire mais ça me parait louche tes références circulaires !

    ----------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $nom_site = new Zend_Form_Element_Text('nom_site');
    $nom_site->setLabel('nom_site')
    	->setRequired(true)
    	->addFilter('StripTags')
    	->addFilter('StringTrim')
    	->addValidator('NotEmpty');
    tu peux faire plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $nom_site = new Zend_Form_Element_Text('nom_site', array(
    	'label' => 'nom_site',
    	'required' => true,
    	'allowEmpty' => false,
    	'filters' => array('StripTags', 'StringTrim')
    ));
    remarque valable pour tous tes éléments

    ----------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $SallesdesSite = $dbSallesdesSites->getDefaultAdapter()->fetchAll('SELECT idSalle FROM salle,site,sallesdessites WHERE site.id=sallesdessites.idSite and salle.id=sallesdessites.idSalle and site.id='.$identifiant);;
    foreach($SallesdesSite as $salleSitte)
    {
    	$salleSites[] = $salleSitte['idSalle'];
    }
    WO !
    1. tu écris à la main ton SQL
    2. tu ne veux que des ids, pourquoi aller chercher dans la table salle alors que tu les as dans la table de jointure ??
    3. t'as 2 ";", pas grave, ça fait une instruction vide au parsing mais ça sert à rien
    4. et la déclaration du tableau ? c pas pasque PHP le permet que c'est pas crade


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $SallesdesSite = $dbSallesdesSites->fetchAll($dbSallesdesSites->select()->where('idSite=?', $identifiant)->distinct());
    $salleSites = array();
    foreach($SallesdesSite as $salleSitte)
    {
    	$salleSites[] = $salleSitte['idSalle'];
    }
    ----------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $dbSalle = new Model_DbTable_Salle();
    $liste_dbSalle = $dbSalle->fetchAll();
    foreach ($liste_dbSalle as $dbSalle) {
    	$salleTab[$dbSalle->id] = $dbSalle->nom_salle;
    }
    autre solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $db = Zend_Db_Table::getDefaultAdapter();
    $liste_dbSalle = $db->fetchPairs($db->select()->from($dbSalle->info(Zend_Db_Table::NAME), array('id', 'nom_salle')));
    flemme de lire le contrôleur, pas assez de temps

    continue à lire les tutos, bon coding
    Dia [ Page DVP ] [ Site pro ]

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 55
    Par défaut
    merci beaucoup pour ces conceils que je m'en vais de ce pas retranscrire dans mon code pour le rendre + propre

    merci mille fois.

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 55
    Par défaut
    Encore merci .
    j'ai aporté les différentes modification que vous m'aviez proposez mais j'ai un soucu au niveau de get_result

    j'ai implémenter la fonction dans la classe class Model_DbTable_Site extends Zend_Db_Table

    mais ensuite comment doije l'appelé? get_result() directement ne marche pas et $dbSallesdesSites->get_result($sallesdessites); non plus.


    merci désolé de vous embéter avec ec genre de chose de base.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 68
    Par défaut
    Tu a fait comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $dbSallesdesSites = new Model_DbTable_SallesDesSites();
    $dbSallesdesSites->get_result($sallesdessites);

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 55
    Par défaut
    oui et j'ai pour réponse.
    Fatal error: Call to undefined method Model_DbTable_SallesDesSites::get_result() in C:\Test_ZEND\application\controllers\SiteController.php on line 31


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		$dbSallesdesSites = new Model_DbTable_SallesDesSites();
    		foreach($this->view->sites as $sallesdessites) {
    			$SallesdesSite[] = $dbSallesdesSites->get_result($sallesdessites);
    			$i++;
    		}
    merci bien.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 68
    Par défaut
    Tu peux nous montrer la classe ?

    Si tu appelles une autre méthode de cette classe, ça fonctionne?

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 55
    Par défaut
    Voici la classe.

    en vous remerciant.

    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
    <?php
     
    /**
     * Salle table data gateway
     *
     * @uses       Zend_Db_Table
     * @package    QuickStart
     * @subpackage Model
     */
    class Model_DbTable_Site extends Zend_Db_Table {
    	protected $_name = 'site';
    	protected $_primary = 'id';
     
    	protected $_referenceMap = array(
    		'sallesdessites' => array('columns' => 'id', 'refTableClass' => 'Model_DbTable_sallesdessites')
    	);
    	public function get_result($saleid) 
    	{
    	$select = $this->select()->from(array("n_s" => "nom_salle"), null)
    						     ->join(array("s" => "site"), "s.id=sds.idSite")
    						     ->join(array("sds" => "sallesdessites"), "s.id=sds.idSalle")
    						     ->where("s.id = ?", (int)$saleid);
    	return $this->fetchAll($select);
    	}
     
    }

  12. #12
    Membre émérite
    Avatar de Dia_FR
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2006
    Messages : 512
    Par défaut
    tu as défini la méthode get_result dans la classe Model_DbTable_Site et tu l'appelles sur une instance de la classe Model_DbTable_SallesDesSites...
    Dia [ Page DVP ] [ Site pro ]

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 55
    Par défaut
    Citation Envoyé par Dia_FR Voir le message
    tu as défini la méthode get_result dans la classe Model_DbTable_Site et tu l'appelles sur une instance de la classe Model_DbTable_SallesDesSites...

    en effet......... MERCI


    JE me permet de remettre mon code apres diférente modification notament celle que vous m'avez proposé.



    siteCpntroller
    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
    120
    121
    122
    123
    124
    125
    126
    127
    128
    <?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->get_result($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');
    				$id = $row->save();
    				$dbsallesdessites = new Model_DbTable_SallesDesSites();
    				$sallesdessites=$form->getValue('idSalle');
    				for($i=0; $i<count($sallesdessites);$i++){
    					$row = $dbsallesdessites->createRow();
    					$row->idSite = $id;
    					$row->idSalle = $sallesdessites[$i];
    					$row->save();
    				}
    				$this->_redirect('/site');
    			} else {
    				$form->populate($formData);
    			}
    		}
    	}
     
    	function modifierAction() {
    		$this->view->title = "Modifier les informations du site";
    		$identifiant = $this->_request->getParam('id');
    		$form = new Form_siteForm($identifiant);
    		$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->getParam('id');
    			$del = $this->_request->getPost('del');
    			if ($del == 'Oui' && $id > 0) {
    				$dbSallesdessites = new Model_DbTable_SallesDesSites();
    				$where = 'idSite = '.$id;
    				$dbSallesdessites->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);
    			}
    		}
    	}
    }

    siteForm
    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
    <?php
    class Form_siteForm extends Zend_Form
    {
    	public function __construct($identifiant = 0,$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->fetchAll($dbSallesdesSites->select()->where('idSite=?', $identifiant)->distinct());
    		$salleSites = array();
    		foreach($SallesdesSite as $salleSitte)
    		{
    			$salleSites[] = $salleSitte['idSalle'];
    		}
     
    		$dbSalle = new Model_DbTable_Salle();
    		$db = Zend_Db_Table::getDefaultAdapter();
    		$liste_dbSalle = $db->fetchPairs($db->select()->from($dbSalle->info(Zend_Db_Table::NAME), array('id', 'nom_salle')));
    		$salle = new Zend_Form_Element_MultiCheckbox('idSalle');
    		$salle->setLabel('Salle')
    		    ->setValue($salleSites)
    			->setMultiOptions($liste_dbSalle)
    			->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));
    	}
    }

    sallesdessites.php (model)
    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
    <?php
     
    /**
     * Reservation table data gateway
     *
     * @uses       Zend_Db_Table
     * @package    QuickStart
     * @subpackage Model
     */
    class Model_DbTable_SallesDesSites extends Zend_Db_Table_Abstract
    {
    	protected $_name = 'sallesdessites';
    	protected $_primary = 'id';
     
    	protected $_referenceMap = array(
    		'Site' => array('columns'  => 'idSite', 'refTableClass' => 'Model_DbTable_Site'),
    		'Salle' => array('columns' => 'idSalle', 'refTableClass' => 'Model_DbTable_Salle')
    	);
    	public function get_result($saleid) 
    	{
    	$select = $this->select()
    	->setIntegrityCheck(false)
    	->from(array("s" => "salle"),array("nom_salle" => "nom_salle"))
    						     ->join(array("sds" => "sallesdessites"), "s.id=sds.idSalle")
    						     ->where("sds.idSite = ?", (int)$saleid);
    	return $this->fetchAll($select);
    	}
    }


    Site.php(modèl)
    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
    <?php
     
    /**
     * Salle table data gateway
     *
     * @uses       Zend_Db_Table
     * @package    QuickStart
     * @subpackage Model
     */
    class Model_DbTable_Site extends Zend_Db_Table {
    	protected $_name = 'site';
    	protected $_primary = 'id';
     
    	protected $_referenceMap = array(
    		'sallesdessites' => array('columns' => 'id', 'refTableClass' => 'Model_DbTable_sallesdessites')
    	);
     
    }
    Encore merci ce code me parais de + en + beau


    Bonne journée.

  14. #14
    Membre émérite
    Avatar de Dia_FR
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2006
    Messages : 512
    Par défaut
    j'ai relu juste les modèles

    • y a tjs le truc bizarre de Site qui référence SallesDesSites, qui référence Site, qui référence SallesDesSites... dependentTables au lieu de referenceMap dans Site ? de c'que j'en comprends hein
    • SallesDesSites::get_result($saleid) : retourne un rowset de salles liées à un site : je changerai le nom et la localisation de cette méthode, j'la mettrai dans la classe représentant un row de Site et j'l'appellerai genre "getLinkedSalles", c'est moche mais tu vois l'idée, faut que ça soit parlant, "get_results" c'est ultra bateau, ça dit pas c'que ça fait. Et d'ailleurs dans cette méthode,ton param s'appelle "saleid" et tu l'utilises pour "idSite=saleid" donc t'as un prob de nommage de ton param
    • pas de modèles pour les salles ?
    Dia [ Page DVP ] [ Site pro ]

Discussions similaires

  1. Question optimisation de code PHP/HTML
    Par heavenvibes dans le forum Langage
    Réponses: 7
    Dernier message: 14/08/2008, 11h57
  2. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  3. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  4. :?: question d'optimisation!
    Par Stopher dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 21/06/2004, 17h15
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

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