Accueil > > > CATAPULT FRAMEWORK, VERSION 0.1 : "ORIGIN"
CATAPULT FRAMEWORK, VERSION 0.1 : "ORIGIN"
Information sur la source
Description
Bonjour à tous. Bon voilà un énorme travail sur lequel je suis depuis un long moment. Je réalise un framework non pas pour concurrencer les grands Zend, Symfony, Cake et autres, mais pour avoir un framework fonctionnel, légé afin de réaliser des sites suffisament importants pour demander une aide en développement et pas sufffisament importants pour utiliser les "monstres" actuels. L'autre motivation est personnelle, c'est pour voir ce dont je suis capable et de ce point de vue là, je compte sur vous pour relever mes erreurs, ainsi que vos suggestions/remarques/critiques sur une partie ou toute du framework. Sachez qu'il est loin d'être fini et qu'il reste encore beaucoup de travail à faire. La version actuelle est fonctionnelle, c'est pour cela que je la publie, mais vous ne trouverez pas tous les éléments tel qu'on les trouves sur Zend. La gestion des utilisateurs par exemple, est une fonctionnalité à venir. (entre autre). Pour voir les différens apports en fonction des évolutions, vous pouvez allez faire un tour sur le site que j'ai (vite fait) mis en place pour l'occasion : http://catapult.reflectiv.net. Voici un petit exemple de son utilisation :
Source
- <?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 !! :)
<?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 !! :)
Conclusion
Pour le moment malheureusement, il n'y a aucune documentation possible, faute de temps. Les sources sont détaillées du mieux que j'ai put et j'ai fait en sorte de proposer un travail de qualité. Sachez que la couche d'abstraction aux bases de données sera entièrement revu dans la version 0.2. En effet, actuellement elle est basée sur "mon propre systeme" d'abstraction. Pour la version 2, le modele sera calqué sur PDO afin de rendre compatible sans modification de code un site utilisant PDO ou mes classes (vous n'aurez juste qu'à préfixer votre dsn par pdo_ pour utiliser le driver pdo fournit par php)
Je n'ai pas mis cette source pour en faire de la publicité (c'est encore trop tot ;)), mais plus pour vous montrer de quoi est capable PHP et aussi pour avoir vos avis sur ce travail. (Je n'attends pas de "tu réinvente la roue", je suis déjà au courrant ;) :p)
J'attends vos commentaires avec impatience !! :)
Bonne journée à vous Cordialement :)
Historique
- 11 avril 2008 10:10:14 :
- Mauvaise interprétation du code par le moteur de rendu de phpcs :/ :p
- 11 avril 2008 12:07:04 :
- Correction d'un petit bug dans le Router
- 16 avril 2008 04:47:10 :
- Mise à jour du code, prise en comptes des commentaires :
_ Modification du systeme d'Exceptions (votre avis ?)
_ Correction de nombreux bugs
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Class POO retourné le nom de l'objet [ par MeTh ]
Bonjour,Comment retourné le nom de l'objet déclaré?exemple :$monobjet = new GridR();comment recuperé $monobjet dans ma class?Merci
Include, class et array [ par Hades5k ]
Bonjour! J'ai un petit problème à utiliser un array dans un fichier que j'inclus... voici un peu le code : <?php $classNames = array(); include_onc
pb avec la poo5 [ par windu ]
Voila mon problème:Je crée un objet qui manipule (entre autres) des tableaux.... jusque là tout va bien!La où je coince, c'est que cet objet est appel
PHP 5: tester le framework NOAS 1.0.1b [ par phanatic ]
Salut,la sortie de PHP5 et de son nouveau model objet ( Zend Engine 2.0 ) est une trop belle opportunité pour les developpers objet de concevoir des d
Quelle bibliothèque utilisée pour le mapping objet relationnel ? [ par marik7335 ]
Je cherche une bibliothèque permettant l'utilisation du mapping objet relationnel. Si vous en connaissez ou si vous avez une piste pouvant m'éclairez
Problem d'affichage de resultat de requete sous forme de tableau [ par jbcaiz ]
explication : je fais un requete de recherche dans ma base, qui doit normalement me sortir plusieur résultat.je veux que ces résultat s'affiche dans u
OBJECT EMBED + BLOB [ par RealKEV1 ]
Bonjour,Je récupére grace à php un objet .wmv crypté type LongBlob ( stocké dans une table mysql). Et je voudrais faire une page html spéciale pour po
objet [ par alahyaneali ]
en déclarant une classe sur un fichier phpest il possible de creer cet objet à partir d'un autre fichierou l'utiliser à partir d'un aut
Serveur SMTP [ par Marion0904 ]
Bonsoir, J'essai d'nvoyer des mails en utilisant la class phpmailer (disponible sur http://phpmailer.sourceforge.net/). J'incu la class php mail
comparatif framework php [ par mickey91 ]
Salut, J'essaie d'établir un comparatif entre tous les framework PHP existants ou en ts cas sur les plus utilisés (copix, studs, php.MVC, ho
|
Derniers Blogs
[WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : SONDAGE..RE : SONDAGE.. par phpAnonyme
Cliquez pour lire la suite par phpAnonyme RE : SONDAGE..RE : SONDAGE.. par TychoBrahe
Cliquez pour lire la suite par TychoBrahe
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|