$persistant
class EntiteLivre extends AbstractEntite
{
const TABLENAME = 'livre';
static $COLNAMES = array('liv_num', 'liv_titre', 'liv_depotlegal');
static $COLTYPES = array('number', 'text', 'date'); // par facilité, les types des formulaires => à améliorer
static $PK = array('liv_num'); // tableau pour une éventuelle clé composite
static $AUTOID = FALSE; // booléen indiquant si le renseignement de la clé est automatisé
static $FK = array(); // tableau pour les éventuelles clés étrangères
protected $liv_num;
protected $liv_titre;
protected $liv_depotlegal;
// pas dechangement pour la suite ../..
// initialisation des variables $contenu et $message pour alimenter <body>
$contenu = "";
$message = "";
// initialisation du connecteur myPDO pour la connexion
// (sans nom de Table à renseigner selon le contexte)
$myPDO = new MyPDO('mysql', $_ENV['host'], $_ENV['db'], $_ENV['user'], $_ENV['password']);
if (!isset($_GET['action']))
$_GET['action'] = "initialiser";
switch ($_GET['action']) {
case 'initialiser':
$_SESSION['état'] = 'Accueil';
break;
case 'selectionnerTable':
$myPDO->setNomTable($_GET['table_name']);
$_SESSION['état'] = 'afficheTable';
$_SESSION['table_name'] = $_GET['table_name'];
break;
case 'supprimerEntité':
$myPDO->setNomTable($_SESSION['table_name']);
// récupération du nom de colonne dans le GET
$keyName = array_keys(array_diff_key($_GET, array('action'=>TRUE)))[0];
$myPDO->delete(array($keyName => $_GET[$keyName]));
$message .= "<p>Entité ". $_GET[$keyName]." supprimée</p>\n";
$_SESSION['etat'] = 'afficheTable';
break;
case 'créerEntité': // construction du formulaire de création de l'entité
$myPDO->setNomTable($_SESSION['table_name']);
// Réflection pour récupérer la structure de l'entité
$classeEntite = new ReflectionClass("lmsf\Entite".ucfirst($_SESSION['table_name']));
$colNames = $classeEntite->getStaticPropertyValue("COLNAMES");
$colTypes = $classeEntite->getStaticPropertyValue("COLTYPES");
$paramForm = array_combine($colNames,$colTypes);
if ($classeEntite->getStaticPropertyValue("AUTOID"))
$paramForm = array_diff_key($paramForm,
array($classeEntite->getStaticPropertyValue(("PK"))[0] => TRUE));
// $paramForm est un tableau associatif destiné à configurer le formulaire
var_dump($paramForm);
// Réflection pour récupérer la bonne vue
$classeVue = new ReflectionClass("lmsf\Vue" . ucfirst($_SESSION['table_name']));
$vue = $classeVue->newInstance();
$contenu .= $vue->getForm4Entity($paramForm, "insérerEntité");
// valeur par défaut non géré ci-dessus
//$contenu .= $vue->getForm4Entity(array('liv_num' => array('type' => 'number',
// 'default' => $nbEntites + 1),
// 'liv_titre' => 'text',
// 'liv_depotlegal' => 'date'), "insérerEntité");
$_SESSION['état'] = 'formulaireTable';
break;
case 'modifierEntité': // construction du formulaire de modification de l'entité
// ../..
$_SESSION['état'] = 'formulaireTable';
break;
case 'insérerEntité': // validation du formulaire de création d'une entité
$myPDO->setNomTable($_SESSION['table_name']);
// Réflection pour récupérer la structure de l'entité
$classeEntite = new ReflectionClass("lmsf\Entite".ucfirst($_SESSION['table_name']));
$colNames = $classeEntite->getStaticPropertyValue("COLNAMES");
$colTypes = $classeEntite->getStaticPropertyValue("COLTYPES");
$paramInsert = array_diff_key($_GET, array('action'=>'insérerEntité'));
if ($classeEntite->getStaticPropertyValue("AUTOID"))
$paramInsert = array_merge([$classeEntite->getStaticPropertyValue(("PK"))[0] => null],
$paramInsert);
var_dump($paramInsert);
$myPDO->insert($paramInsert);
// avant : $myPDO->insert(['liv_num' => $_GET['liv_num'],
// 'liv_titre' => $_GET['liv_titre'],
// 'liv_depotlegal' => $_GET['liv_depotlegal'] ] );
$entite = "?"; //$myPDO->get('liv_num',$_GET['liv_num']);
$message .= "<p>Entité $entite crée</p>\n";
$_SESSION['état'] = 'afficheTable';
break;
case 'sauverEntité': // validation du formulaire de modification de l'entité
// ../..
$_SESSION['état'] = 'afficheTable';
break;
default:
$message .= "<p>Action " . $_GET['action'] . " non implémentée.</p>\n";
$_SESSION['etat'] = 'Accueil';
}
switch ($_SESSION['état']) {
case 'Accueil':
$contenu .= getListeTables();
break;
case 'afficheTable' :
$classeVue = new ReflectionClass("lmsf\Vue".ucfirst($_SESSION['table_name']));
$vue = $classeVue->newInstance();
$lesEntites = $myPDO->getAll();
$contenu .= $vue->getAllEntities($lesEntites);
break;
case 'formulaireTable':
//rien à faire, tout est fait dans la gestion des Actions ?
break;
default:
$message .= "<p>état ".$_SESSION['etat']." inconnu</p>\n";
$_SESSION['etat'] = 'Accueil';
}
// ajout d'un lien vers la page d'accueil
$contenu .= "<p><a href='index.php?action=initialiser'>Accueil</a></p>\n";
// ../..
Démo (visible uniquement lors du CM, screencast sur eureka)