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