Retour sur le MVC
Posté : 05 mars 2010, 21:13
Bonjour à toutes et à tous,
Voilà l'histoire, il y a maintenant 2-3 semaines, j'ai appris qu'un des site que je fréquentais allait passer d'un framework maison à symphony et ce dans le but d'accroitre leur rapidité de travail. Je me suis donc dis, pourquoi pas (oui, je suis très influençable des fois). J'ai donc regardé Symphony, et j'ai vu des solutions clef-en-main, ce qui ne m'a pas plût. J'ai re-jeter un œil du côté de ZendFramework : une grosse boîte à outils. Ensuite j'ai jeté un œil à HoaFramework, idem. J'ai regardé AtomikFramework, qui semble léger, voire même trop. Faisant du Ruby à mes heures perdues, je me suis penché sur RoR pour m'inspirer (pas taper). J'ai donc décidé de me lancer dans l'aventure du Framework.
But du jeu : produire un Framework léger, efficace qui me permette, une fois le gabarit du site installé, de n'avoir à me soucier que des modèles, voire des contrôleurs. Le framework aurait à coeur la hiérarchisation, la sécurité, la simplicité et les performances. Une couche "graphique/console" me permettrais de plus de générer une bonne partie de mon code.
L'un des points fort de mon futur framework est qu'il repose sur le MVC, ainsi, j'aimerais vous soumettre un exemple de code pour voir si j'applique bien de MVC.
Exemple de contrôleur :
/modules/commandes/editer.php :
/modules/commandes/libs/paniers.class.php :
/include.php
Par avance merci
Voilà l'histoire, il y a maintenant 2-3 semaines, j'ai appris qu'un des site que je fréquentais allait passer d'un framework maison à symphony et ce dans le but d'accroitre leur rapidité de travail. Je me suis donc dis, pourquoi pas (oui, je suis très influençable des fois). J'ai donc regardé Symphony, et j'ai vu des solutions clef-en-main, ce qui ne m'a pas plût. J'ai re-jeter un œil du côté de ZendFramework : une grosse boîte à outils. Ensuite j'ai jeté un œil à HoaFramework, idem. J'ai regardé AtomikFramework, qui semble léger, voire même trop. Faisant du Ruby à mes heures perdues, je me suis penché sur RoR pour m'inspirer (pas taper). J'ai donc décidé de me lancer dans l'aventure du Framework.
But du jeu : produire un Framework léger, efficace qui me permette, une fois le gabarit du site installé, de n'avoir à me soucier que des modèles, voire des contrôleurs. Le framework aurait à coeur la hiérarchisation, la sécurité, la simplicité et les performances. Une couche "graphique/console" me permettrais de plus de générer une bonne partie de mon code.
L'un des points fort de mon futur framework est qu'il repose sur le MVC, ainsi, j'aimerais vous soumettre un exemple de code pour voir si j'applique bien de MVC.
Exemple de contrôleur :
/modules/commandes/editer.php :
<?php
/* Appel du noyau */
include '../../include.php';
/* Test des droits primaire */
if(Session::getSingleton->id == 0)
\Base::parse('modules/membre/connexion-obligatoire.html');
/* Appel des modèles (répertoire, fichier) */
\Base::modele('commandes', 'commandes');
\Base::modele('produits', 'produits');
/* Aucune erreur */
$err = false;
if(\Base::TestForm('edite_commande', @$_POST['temps'], $err, 'paniera', 'paniern', 'produit', 'quantite'))
{
if(\Commandes\Action\editer($_POST['produit'], $_POST['paniera'], $_POST['paniern'], $_POST['quantite']))
\Base::parse('modules/commandes/edition-reussie.html');
else
\Base::parse('modules/commandes/edition-impossible.html');
}
else
{
if(isset($_GET['panier']) && $_GET['panier'] > 0 && isset($_GET['produit']) && $_GET['produit'] > 0)
$vue['commande'] = \Commandes\Listage\recupere($_GET['produit'], $_GET['panier']);
else
\Base::parse('modules/commandes/aucun-panier-commande.html');
\Base::prepare('edite_commande');
\Base::parse('modules/commandes/edition.html');
}
?>
Un modèle :/modules/commandes/libs/paniers.class.php :
<?php
/**
* Espace nom de gestion utilisateur des paniers
*
* @author Katagoto ([email protected])
*
*/
namespace Paniers
{
/**
* Espace nom des actions sur les paniers
*
*/
namespace Action
{
/**
* Crée un nouveau panier
*
* @return integer Identifiant du nouveau panier
*/
function creer()
{
return SPDO::getSingleton()->prepare('INSERT INTO
paniers
(fk_membre)
VALUES(:fk_membre)
')
->execute(array(
':fk_membre' => (integer)Session::getSingleton->id
))
->fetch()
->pk_panier;
}
}
}
Le fichier inclus partout, coeur du framework :/include.php
<?php
/**
* Fichier include
*
* @author Katagoto
*/
declare(encoding='UTF-8');
namespace
{
session_start();
$vues = array();
date_default_timezone_set('Europe/Paris');
header('Content-Type: text/html; UFT-8');
define('ABS_DIR', $_SERVER["DOCUMENT_ROOT"].'/');
if(!is_file(ABS_DIR.'base/base.class.php'))
die('Le fichier des fonctions de base a disparut, le script ne peut continuer de s\'executer');
else
include_once(ABS_DIR.'base/base.class.php');
Base::modele('administration', 'maintenance');
maintenance::affiche();
Base::modele('libs', 'sql');
Base::modele('libs', 'session');
}
Voilà, j'attends vos réactions,Par avance merci