Soyez le premier à donner votre avis sur cette source.
Vue 8 627 fois - Téléchargée 559 fois
<?php // Tout d'abord, le fichier de configuration. // config.php // Cet exemple contient TOUTES les variables utilisées par chaque classes, et leur valeur sont celle par défaut // (en gros cette config ne sert à rien :p) Elle est juste là pour vous montrer comment cela fonctionne $config['Router']['Controller'] = 'Accueil'; $config['Router']['Method'] = 'index'; $config['Request']['Security']['MaxArgs'] = 10; $config['Request']['Security']['ParseArgs'] = true; $config['EventHandler']['Display'] = true; $config['EventHandler']['DisplayErrors'] = E_ALL; $config['EventHandler']['Log'] = true; $config['EventHandler']['LogErrors'] = 0; $config['EventHandler']['RedirectPath'] = 'error.html'; $config['EventHandler']['RedirectErrors'] = 0; $config['EventHandler']['IgnoreRepeated'] = true; $config['Libraries']['Log']['Path'] = 'errors.log'; $config['Libraries']['Upload']['DestinationFolder'] = ''; $config['Libraries']['Upload']['FileName'] = ''; $config['Libraries']['Upload']['FilePath'] = ''; $config['Libraries']['Upload']['AllowedExt'] = array (); $config['Libraries']['Upload']['Rename'] = false; $config['Libraries']['Upload']['CleanFileName'] = false; $config['Libraries']['Upload']['CreateSubFolders'] = true; $config['Libraries']['Upload']['MaxFileSize'] = 0; $config['Libraries']['Upload']['IsImage'] = false; $config['Loader']['Paths']['Base'] = '../Catapult/'; $config['Loader']['Paths']['App'] = ''; $config['Loader']['Paths']['Controller'] = 'Controllers'; $config['Loader']['Paths']['Model'] = 'Models'; $config['Loader']['Paths']['View'] = 'Views'; $config['Loader']['Exts']['Controller'] = '.php'; $config['Loader']['Exts']['Model'] = '.php'; $config['Loader']['Exts']['View'] = '.phtml'; $config['Controller']['defaultContentType'] = 'text/html'; // Voici un paramètre. On peux en ajouter à notre guise, comme cela nous plait $config['dsn'] = 'mysql://root@localhost/fcpe90'; ?> <?php // Ensuite, le fichier index.php // Fichier mâitre qui s'occupe du travail principal ! :) // Remarquez comme il est simple :p (mais on peux le complexifier :p) require_once ('../Catapult/Controller/FrontController.php'); $oCfg = Config::getInstance (); $oCfg->loadFromPhp ('config.php'); $oCFC = new FrontController (); $oCFC->init (); ?> <?php // Un controller parmis tant d'autres : class IndexController extends Controller { // init est une fonction appelée par le constructeur, c'est une sorte de __construct pour votre controller protected function init () { // Chargement du modèle de base de donnée avec les paramètres de connexion donnée dans le fichier de config $this->loadDb ($this->Config->dsn); $this->setContentType("Text/html"); // Définition du type de rendu. A pour effet d'instancier la classe appropriée pour le rendu. $aInfos['title'] = "Bienvenue sur mon site"; // Chargement du haut de la page avec les variables préalablement chargées (appelera la page header.phtml dans le repertoire View/ $this->Response->preRender ('header', $aInfos); $this->Response->postRender ('footer'); // preRender permettra un rendu avant le rendu principal, et postRender permettra un rendu apres le rendu principal (cela évite d'appeler une méthode __destruct par exemple pour faire un footer) } public function index () { // Dans notre cas on récupere les valeurs de la ligne qui correspond à la condition WHERE dans la base de donnée // Admirrez la simplicité !!!!! $this->Response->render ('body', $this->Db->executeLine ('SELECT title, content FROM texts WHERE id=1;')); } } // Bon c'est vraiment quelque chose de simple afin de vous montrer, tout n'est pas détaillé ! ?> <?php // le fichier header maintenant : // Contient que du html quasiment ! ?> <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <title><?php echo $title; ?></title> <link rel="stylesheet" href="styles.css" type="text/css"/> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta name="Identifier-url" content="http://www.fcpe90.com"/> <meta http-equiv="Content-Language" content="fr"/> <meta name="Description" content="none"/> <meta name="Keywords" content="fcpe, ecole, école, aide, association, associations, aides"/> <meta name="Author" content="fcpe90"/> <meta name="Robots" content="index,follow,all"/> <meta name="revisit-after" content="3 days"/> </head> <body> <div id="main"> <div id="menu"> <ul> <li>Accueil</li> <li>A propos</li> <li>...</li> <li>Contact</li> </ul> </div> <div id="content"> <?php // Le fichier footer maintenant // Aussi que du html ! ?> </div> </body> </html> <?php // Et un exemple de fichier body.phtml : ?> <h1><?php echo $title; ?></h1> <div><?php echo $content; ?></div> Et voila !! :)
10 déc. 2009 à 16:52
J'ai 2-3 questions ^^ comment tu fais pour les parties communes (header, footer...) d'une page pour éviter les redondances dans tes "controllers"? Pour éviter d'avoir a répéter les memes choses de controler en controler ^^
Une autre petite question (là c'est pour bien comprendre ta philosophie de pensée ^^ ) qu'elle est l'avantage d'avoir des exceptions par type? de ne pas avoir (par exemple) des phrases en anglais directement dans ton code? de standardiser les erreurs en les externalisants ? que faire dans le cas d'une erreur un peu exotique qui n'existe qu'une fois?
Voila j'espère avoir de petite réponse.
En tout cas joli boulot ;)
28 avril 2008 à 18:08
Le modele MVC s'applique encore, mais je pense pas que ce soit le cas pour une techno Web.
28 avril 2008 à 18:04
Pour la découpe MVC, effectivement elle date et ne correspond plus aux technos client léger de nos jours.
La partie VUE se décompose dans toutes ces parties :
- CSS : présentation
- XHTML : données
- JavaScript : code partie client
Et pour aller plus loin, la partie code client va elle aussi se décomposer...
Du coup la partie vue est un vrai chalenge des frameworks car c'est elle qui apporte la facilité d'intégration (marché dédié aux prestations en services d'intégration)
28 avril 2008 à 17:35
En fait pour le js je suis parti du fait qu'il se situe dans la partie Vue du modèle MVC. Si l'on veux intégrer du Javascript dans un framework Php, alors (d'apres moi), ce n'est plus du MVC, mais quelque chose du genre Modèle, Controlleur, Interacteur, Presentation, ou Interacteur serait la partie graphique.
C'est d'ailleur ce que l'on constate, quand on prends par exemple Zend, Cake, Code Igniter. Ils n'utilisent peu ou prou du Javascript.
Mais peut-etre que pour un framework travaillant sur une technologie Web, et vu l'avancée technologique des choses, il serait préférable d'envisager d'ajouter une couche à ce vieux modèle MVC ? :)
28 avril 2008 à 17:16
http://www.php.net/parse_url
>> Pour les URLs vraiment mal formées, parse_url() peut retourner FALSE et émettre un E_WARNING
(mais là je chipotte - c'est plus à prévoir)
Sinon dommage d'aborder ton dév de cette manière. Des frameworks MVC y'en a au moins 10 connus et des centaines comme le tien. Du coup tu risque d'être le seul utilisateur de ta création ce qui en soit est dommage par rapport à ton travail et la nature du site d'échange.
Une proposition qui pourrais donner un peu d'attrait à l'existant, exploites la partie RIA - pas vraiment intégrée aux frameworks.
Exemples :
http://extjs.com/ ou un peu plus simple - scriptaculous
La partie intégration de Ext JS (par exemple) est lourde car faut tout déclarer en JS alors qu'un XML ferais l'affaire, et un controler gérant la com en ajax ça serais sympa.
Si par exemple tu simplifie l'utilisation d'un tel framework en découpant partie JS/PHP et en simplifiant la déclaration du code client ça va faire un framework incontournable dans le domaine des applicatifs RIA.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.