J'ai eu une idée pour transmettre les informations, qui, à mon sens, applique à 100% le principe du MVC. Le seul problème est qu'il y a un petit défaut, vu que les informations ne sont pas transmises. Pour qu'on puisse me corriger, voici l'idée.
Tout d'abord, c'est une vue qui demande une action : afficher certaines informations. Mais le contenu des informations va dépendre de la vue, d'où le besoin initial de transmettre des paramètres au routeur. Mon idée pour transmettre ces informations est de créer une classe vue avec des setters et des getters. Donc avant que la vue appelle l'action d'affichage, elle appelle les setters ; ensuite le routeur reçoit la demande d'action ; comme il s'agit d'un affichage, une autre vue va être exécutée. Celle-ci va appeler les getters donc en principe recevoir les informations. Mon problème est qu'elle ne reçoit rien, et je comprends pas pourquoi. Je donne mon code et merci de me dire ce qui ne va pas.
La vue DispLarray.php (affiche un tableau contenant toutes les licences) :
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
| <?php
use ticket_rawsrc\view\License\LInfo;
$i=0; ?>
<table>
<tr>
<?php
foreach($this['list'] as $sesa)
{ // les infos à transmettre sont stockées ds des propriétés de la classe Linfo (application_name et sesa)
// c'est placé avant les liens pour que ça soit pris en compte qd on clique sur un lien
$linfo=new Linfo();
$linfo->setAppli($sesa['application_name']);
$linfo->setSesa($sesa['sesa']);
if (!is_int($i/6))
{ // les liens ?action=DispInfoLicenseByArray appellent le routeur pour lancer l'action DispInfoLicenseByArray
?>
<td> <a href="?action=DispInfoLicenseByArray"><?=($sesa['application_name'].' & '.$sesa['sesa'])." " ?></a></td>
<?php
}
else
{
?>
</tr><tr>
<td> <a href="?action=DispInfoLicenseByArray"><?=($sesa['application_name'].' & '.$sesa['sesa'])." " ?></a></td>
<?php
}
$i++;
}
?>
</tr>
</table> |
La classe Linfo qui contient des setters et des getters pour les 2 informations à transmettre : Linfo.php :
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
namespace ticket_rawsrc\view\License;
class LInfo
{
private $appli;
private $sesa;
public function setAppli($value)
{
$this->appli=$value;
}
public function setSesa($value)
{
$this->sesa=$value;
}
public function getAppli()
{
return($this->appli);
}
public function getSesa()
{
return($this->sesa);
}
} |
Le routeur reçoit la demande d'action DispInfoLicenseByArray et va lancer le fichier correspondant :
'DispInfoLicenseByArray' => ticket_rawsrc\view\license\LDispInfoByArray::class
Le fichier lancé est donc : LDispInfoByArray.php :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <?php
namespace ticket_rawsrc\view\License;
use ticket_rawsrc\view\Nav;
use ticket_rawsrc\view\DispMsg;
use ticket_rawsrc\view\License\LInfo;
class LDispInfoByArray
{
public function invoke()
{
Nav::dispNav();
//on appelle les getters
$linfo=new Linfo();
$appli=$linfo->getAppli();
$sesa=$linfo->getSesa();
//on les affiche (la méthode statique dispMsgWithoutMenu fonctionne)
DispMsg::dispMsgWithoutMenu('application='.$appli); echo "<br/>";
DispMsg::dispMsgWithoutMenu('sesa='.$sesa);
}
} |
affichage obtenu :
License
Select
Array
Ticket
Select
Array
To import
application=
sesa=
Donc le menu est affiché mais les informations transmises sont pas là. Peut-on me dire pourquoi ?
Partager