begin process at 2010 02 09 20:42:50
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > CATAPULT FRAMEWORK, VERSION 0.1 : "ORIGIN"

CATAPULT FRAMEWORK, VERSION 0.1 : "ORIGIN"


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :Catapult, framework, objet, mvc, class Niveau :Initié Date de création :11/04/2008 Date de mise à jour :16/04/2008 04:46:57 Vu / téléchargé :3 838 / 168

Auteur : codefalse

Ecrire un message privé
Site perso
Commentaire sur cette source (21)
Ajouter un commentaire et/ou une note

 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 :)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 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

[PHP5] MULTI-THREADING : ACCÉLÉRATION DU TEMPS DE TRAVAIL D'...
Source avec Zip GESTIONNAIRE DE MODÈLES SQL
Source avec Zip [PHP5] - SIMPLE CLASSE D'ENVOI D'EMAIL
[PHP5] - CLASSE D'UPLOAD
Source avec Zip [PHP5] - CLASSE DE VÉRIFICATION DE FORMULAIRE

 Sources de la même categorie

Source avec Zip POO - LOGGING PACKAGE par Waredan
POO - OBJECT CLASS par Waredan
Source avec Zip POO - FACTORY CLASS par Waredan
POO - SINGLETON CLASS par Waredan
POO - PARAMETERHOLDER CLASS par Waredan

 Sources en rapport avec celle ci

Source avec Zip CLASSE SQL par benjycorp
Source avec Zip PHP5 MY EXPLORER : AFFICHE L'ARBORESCENCE DE DOSSIERS par ranouf
Source avec Zip GERER UN ENTREPOT VIA PHP 5 MYSQL VERSION OBJET ( PDO) par fabienenvac
Source avec Zip Source avec une capture PHP SYSTEM NOTATION - SCRIPT BENCHMARK par aKheNathOn
CLASSE DE REDIMENSION D'IMAGE. par Yaug

Commentaires et avis

Commentaire de webdeb le 11/04/2008 12:22:34

Joli travail ! Par contre, pourquoi ne pas avoir écrit un fichier de configuration avec le format ini, xml ou yaml ? Est-il possible d'avoir plusieurs fichiers de configuration également ?

Commentaire de codefalse le 11/04/2008 12:36:36 administrateur CS

Alors il est possible d'avoir plusieurs fichier de configuration, et il est aussi possible d'avoir des fichiers de configuration chargeables en xml, ini ou php (comme présenté ici) mais pas en yaml, je ne connaissais pas ce petit là :p

Si tu veux regarde du coté de /Config/Config.php tu verras les différentes possibilités :)

Commentaire de Axe971 le 11/04/2008 13:56:44

Salut,

Il est sympa le concept, sympathique aussi le site. Mais la visualisation des sources ne fonctionne pas...
J'attends de voir ce que ça donne chez moi pour commenter le projet en lui même.

A bientôt

Commentaire de codefalse le 11/04/2008 14:05:14 administrateur CS

Merci de ton avis.
C'est bizar que les sources ne marchent pas car je ne rencontre aucun probleme pour les afficher ?!

Commentaire de Axe971 le 11/04/2008 16:00:02

C'est peut être parce que j'utilise Firefox... et toi IE?
Je reboot sur Win... et je confirme ou infirme.

Commentaire de codefalse le 11/04/2008 16:10:29 administrateur CS

Perso j'utilise Firefox ... sous linux :p
Mais je viens de comprendre, tu parle des sources sur mon site ou sur phpcs ?
Sur mon site, oui, c'est normal, elles ne fonctionnent pas :p je corrige le bug ce soir :p
Mais tu peux voir l'état actuel de la chose à cette adresse :
http://www.reflectiv.net/Catapult/sources.php

Commentaire de malalam le 11/04/2008 17:35:06 administrateur CS 10/10

Hello,

joli travail, ça se présente bien ton framework :-)
J'ai franchement pas le temps de tout regarder (et puis je ne le ferais pas en un coup lol).
Donc tu auras des commentaires de ma part de temps en temps.
- 1er truc que j'ai regardé (et sur lequel je dois donner mon avis, évidemment...quand tout va bien je ne dis rien) : concernant ton abstraction de DB, la méthode escape() ne doit pas être dans aDBManager : c'est bien trop dépendant du serveur DB utilisé.
- tu devrais créer des exceptions par type, plutôt que par classe. Inspire-toi des exceptions de la SPL qui sont un modèle du genre. Un exemple, la méthode seek() de aDBManager renvoie une exception de type DbException en cas de dépassement. C'est une erreur. Ce doit être une exception de type overflow ou un truc dans le genre. Et mieux, il y en a une toute prête dans la SPL pour ça, et comme tu utilises la SPL...Et puis fonctionner ainsi te permet de factoriser : tu as plusieurs types d'exception qui renvoient en réalité la même chose (l'exemple le plus flagrant étant les exception pour cause de mauvais typage des arguments passés à une méthode : tu pourrais avoir une exception de type argsException, plutôt, par exemple).
- xmlLimit : il existe une classe SPL SimpleXmlIterator, ou un truc dans le genre. Mais elle n'est pas encore très fournie. Juste pour aider un peu ;-)
- je ne suis pas d'accord avec ta façon de gérer la pagination. Pas que ta classe soit mauvaise hein...mais tu DOIS séparer le rendu du moteur interne. Une pagination, c'est un total d'items, un nombre d'items à afficher, et un nombre de pages nécessaires pour tout afficher. C'est tout. Tu devrais te contenter de calculer ces chiffres. Tu peux présenter des types d'affichage via des templates. Et à mon sens, tu devrais créer un moteur JS pour gérer les interactions. Mais une classe PHP qui retourne différentes vues pour différents styles de pagination, je ne pense pas ça opportun.

Bon, ça suffit pour cette fournée :-)




Commentaire de Axe971 le 11/04/2008 17:57:12

Oui je parlais du site ;) Merci pour le lien.

Commentaire de codefalse le 11/04/2008 18:57:53 administrateur CS

@Malalam : Merci pour tes infos, c'est toujours plein de bon conseils. Pour les exceptions, c'est pas con du tout, et en plus en java on en croise souvent !! :p Jvais prendre note !
Pour Db, en fait c'est prévu que je refasse toute la couche dans la verson 0.2 pour l'adapter à PDO. Je me suis rendu compte apres coup que PDO était implémenté de base dans PHP5.1 donc autant en profiter, puisque à cause de la SPL, mon framework nécéssite un php au minimum 5.2 ! :)
L'idée serait de copier PDO en objet php comme ca si le serveur n'a pas pdo, ton driver, au lieu de l'appeler pdo_DRIVER, tu l'appel juste DRIVER et c'est ma classe qui prends en compte la gestion avec la bdd, plus PDO. Et tu n'a rien à changer au niveau de ton code :)

Pour la pagination, de toute facon c'est moche ! :p C'est une des classes dont j'en suis le moin fièr. En fait chaque fonctions privées de rendu fait en général le même travail, à quelque points pres. Ce n'est pas du tout le même principe que la poo ou ce qui se répète doit être centralisé (entre autre).
Par contre le fait qu'il y ait du html est volontaire. Tu sais très bien que je ne mettrais pas des données spécifiques dans une fonction sans raison. En l'occurence, là c'est un helpers spécialisé pour le html, donc je me le permet. Après, on peux voir pour passer la réponse en paramètre, mais dans ce cas là j'aurai besoin d'aide pour trouver une structure potable ! :)

En tout cas merci pour tes très bon commentaires, ils seront fortement pris en comptes !!! :)

Commentaire de yoman64 le 11/04/2008 21:51:36

Salut,

Moi je ferai pas de longs commentaires sur ton code (tout d'abord parce que je n'ai jamais tenté de faire un framework(enfin si, j'en ai commencé un dernièrement...) et j'en ai rarement utilisé, et aussi parce que c'est un boulot énorme qui semble très bien fait).

Ceci dit je suis d'accord avec l'idée que malalam se fait de la pagination, ton code ne devrait pas sortir de html IMHO.

Mais une chose que je remarque tout de suite (Rooooooooh je suis pas fier de toi codefalse ;-))
C'est ÇA: $aInfos['title'] = "Bienvenue sur mon site";
des DOUBLES QUOTES ÇA VA PAS !!!  Mouarf je déconne... enfin...

Bonne chance pour la suite :)

Commentaire de codefalse le 11/04/2008 23:30:05 administrateur CS

J'avais pas remarqué un point, mais Malalam, merci pour ta note, je suis flaté ! :)

@Yoman64 : En fait, j'ai considéré la zone helpers comme une zone de tolérance. Un helpers html à le droit de contenir du html (tu remarquera que c'est le cas pour TableMaker, et FormHelper) car justement leur usage ne les destines qu'à afficher du html. J'ai d'ailleur du mal à concevoir la chose autrement. Si vous avez des idées, je suis preneur !! :)

Quand aux double quotes, oui, tu a raison ! La honte OUUUHHHHH :p.
Pour donner une excuse, j'ai fait un exemple vite fait, et je l'ai fait pendant que je développais du javascript, j'ai un peu mélangé les codes (je met des double quotes en js) ! :)
Tu remarquera que (normallement), dans le framework en lui-même il n'y a pas ce genre de choses :)

Si vous avez le temps, testez-le, faites moi remonter les divers bugs et problemes afin de le corriger et de l'améliorer ! :) Merci beaucoup :)

Commentaire de guill76 le 12/04/2008 13:20:46

salut, ouais pluôt sympa et rigoureux ton ptit framework as-tu un doxigen en ligne par hasard ou autre?

Commentaire de codefalse le 12/04/2008 13:34:35 administrateur CS

malheureusement nan :/
Mais c'est pas une mauvaise idée, je vais le faire ! :)
Je vous tiens au courant :)

Commentaire de codefalse le 16/04/2008 04:49:30 administrateur CS

Voila une petite mise à jour :)
J'ai modifié le systeme d'exceptions comme proposé par Malalam. Si vous voyez des incompréhensions (genre un type d'exceptions qui ne convient pas), n'hésitez pas à me le dire.

Ce coup-ci j'ai joint un exemple normallement fonctionnel, vous n'avez qu'a dézipper et vous rendre sur la page et hop ca devrait etre tout bon :)

N'hésitez pas à me prévenir des différents problemes afin d'améliorer encore le code !

Malalam si tu à d'autres conseils, je suis avide ! :)

Commentaire de aKheNathOn le 28/04/2008 16:33:18

Salut,

Je viens de regarder ton exemple et un peu l'organisation de ton framework mais sans rentrer dans les détails.

Mes conseils afin de t'aider à l'améliorer seraient les suivants :
1. Remplaces parse_url par une vraie classe, car parse_url peut renvoyer faux dans certains cas et a un fonctionnement différent selon versions - puis POO c'est mieux. (c'est dans la démo)

2. Dans le modéle MVC on sépare la vue, le controleur et le modèle, or tu gére le modèle de données dans le controleur : SELECT ... FROM ... - pour gérer le modéle il te faut faire une lib ORM ou en utiliser une (http://pdomap.webframe.fr/)

3. La gestion de la vue est un peu basique, tu devrais augmenter le niveau d'abstraction et ne pas utiliser de PHP, généralement cette partie peut être construite ou adaptée par un designer. Smarty malgré son succès n'est pas une solution à mon avis. Je penche perso pour Prado - voir http://www.xisc.com/ pour avoir une petite idée de leur bijou.
C'est une super alternative aux Html Helpers.

-----

Parcontre c'est du bon boulot, manque une doc permettant d'avoir une vue globale sur ton framework.

Sinon réinventer la roue ce n'est pas mal des fois, juste dit en quoi ta roue est mieux que les autres et à quelle problématique elle répond car au bout du compte le but est de faire adhérer les développeurs à ton framework donc faut leur faciliter le choix et le comparatif avec les autres frameworks.

Commentaire de codefalse le 28/04/2008 16:41:34 administrateur CS

Yop :)
Pour parse_url, si la syntaxe est correcte, je ne vois pas en quoi ca pourrait poser de problemes ?
La prochaine version du framework devrait utiliser PDO et être totalement compatible avec

Pour les requetes sql dans le controlleur, c'était pour avoir quelque chose en exemple, j'ai indiqué sur mon site que j'envisage d'intégrer la gestion d'un ORM dans les prochaines versions, c'est pour cela :p tout n'est pas encore fini ! (:

Pour la vue, c'est un moteur de template tres basique. Il est prévu que je le retravaille afin de proposer quelque chose de compatible avec la plupart des moteurs de template (travailler sur une abstraction au plus haut). Mais sache que Php, à la base, est un moteur de template donc son usage est correct dans ce cas :)

Pour l'instant ce framework n'a rien de révolutionnaire par rapports aux autres, c'est juste un exercice pour évaluer mes compétences, peut-etre qu'à terme, il aura des avantages que les autres n'ont pas ?

En tout cas merci de tes remarrques :) Tout est noté ! :)

Commentaire de aKheNathOn le 28/04/2008 17:16:53

Pour parse url il retourne un mixed, et tu ne vérifies pas le résultat avant de l'utiliser :
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.

Commentaire de codefalse le 28/04/2008 17:35:47 administrateur CS

Je vais corriger ca pour parse_url (au moin traiter l'erreur).

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 ? :)

Commentaire de aKheNathOn le 28/04/2008 18:04:09

C'est un peu la tendance du moment, les MVC intégrent peu à peu les frameworks JS.

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)

Commentaire de codefalse le 28/04/2008 18:08:36 administrateur CS

Tout a fait ! :)

Le modele MVC s'applique encore, mais je pense pas que ce soit le cas pour une techno Web.

Commentaire de heliburn le 10/12/2009 16:52:10

Joli travail. J'ai bien regardé le code et c'est joli.

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 ;)

 Ajouter un commentaire


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 : &lt;?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&#233;clarant une classe sur un fichier phpest il possible de creer cet objet &#224; partir d'un autre fichierou l'utiliser &#224; partir d'un aut Serveur SMTP [ par Marion0904 ] Bonsoir, J'essai d'nvoyer des mails en utilisant la class phpmailer (disponible sur&nbsp; http://phpmailer.sourceforge.net/). J'incu la class php mail comparatif framework php [ par mickey91 ] Salut, J'essaie d'&#233;tablir un comparatif entre tous les framework PHP existants ou en ts cas sur les plus utilis&#233;s (copix, studs, php.MVC, ho


Nos sponsors


Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales