quelques idées et propositions

Grégoire Cachet <[email protected]> Wed, 21 Apr 2004 20:21:32 +0200
Newsgroups gmane.comp.web.blogv2.devel
Message-ID <[email protected]>
Bonjour,

j'ai essayé de résumer quelques unes de mes idées aujourd'hui, notament 
vis-à-vis de la description des modules et gestionnaires et de la 
relation avec la requete interne.

j'ai placé deux XML de description sur le subversion :

http://v2.dreams4net.com:7390/svn/user/GregoireCachet/tmp/declarations/

voici un cours résumé de ce qui m'est passé par la tête :

INITIALISATION :
================

on passe au controlleur le gestionnaire a charger en premier, dans le 
module donné.
(ca fonctionne a peu près comme linux où le kernel lance 'init' juste 
apres le boot
(on peut appeler cette séquence *événement* ? voir le xml d'Eric)

Evénements : Web, Files, Reload
- Web est l'événement *normal* répondant à une requête de l'utilisateur
  On chope tout ici, sauf ce qui est des formes suivantes
    On lie dans un .htaccess via mod_rewrite à events/web.php
    Il suffira juste de récuperer $_SERVER['REQUEST_URI'] ensuite
   
- Files permet de distribuer des fichiers (css, scripts, images pour le 
design)
  Necessité de localisation à cause des images (si on veut mettre des 
titres en FIR etc)
    Proposition d'URI : /(.{2}/)(css|images|scripts)/(.*)
    On lie dans un .htaccess via mod_rewrite à events/files.php
    Il suffira juste de récuperer $_SERVER['REQUEST_URI'] ensuite
   
- Reload permet de reconstruire l'application, si on fait des 
changements dans la
  configuration, si on ajoute des modules.
    On lance donc un controlleur minimal qui peut se suffir à lui même, 
à l'aide d'un module
    particulier 'reload'
    'reload' ne doit rien utiliser en dehors des classes qui sont dans 
libs/ et qui doivent
    être indépendantes du reste
    Proposition d'URI : /reload
    On lie dans un .htaccess via mod_rewrite à events/reload.php



TYPES DANS LA REQUETE INTERNE :
===============================

Par défaut on a les types lang, year, month, day, id, file.
Dans une requete HTTP où l'on ne nomme pas les informations, on doit 
avoir un ordre strict et s'il
y a des paramètres optionnels, il faut le dire et il faut être capable 
de résoudre
- lang est le premier paramètre, doit contenir deux caractères 
numériques en minuscule [a-zA-Z]{2}, 'optional'
- year est composé de quatre chiffres et doit être une année valide 
(0000 à 9999), 'optional'
- month est composé de deux chiffres et doit être un mois valide (01 à 
12), 'optional'
- day est composé de deux chiffres et doit être un jour valide (01 à 31),
  on devra aussi valider la date par rapport à l'année et au mois, 
'optional'
- id est un identifiant, il peut contenir des caractères alphanumériques 
(majuscules, minuscule, chiffres, -, _),
  'optional'
- file permet de pointer vers un fichier attaché à une donnée. Il peut 
contenir tous les caractères autorisés
  pour un fichier sur un système de fichiers classique (voir 
restrictions). Il est 'optional' et ne peut exister
    que si id existe : 'require id'
   
S'il y a une erreur de syntaxe, on génère une erreur 404.
Dans une URI, on séparera les différents paramètres par des '/'
Ensuite, on peut ajouter des options, après le caractère '?' dans une 
URI, comme convenu précédemment.

Les modules peuvent déclarer de nouveau types de paramètres (catégories 
pour le blog). Ils devront identifier
leur position vis-à-vis des autres et les modules devront fournir une 
interface pour les identifier (à définir)
On peut avoir l'option 'multiple' pour répeter le type plusieurs fois 
(/Categorie/SousCategorie par exemple)


DOCUMENTHANDLER :
=================

Il récupère les descriptions des gestionnaires lors de la contruction de 
l'application et fabrique un arbre
qui associe à un certain type de requete un ou des gestionnaires.

-- 
Grégoire Cachet - Développeur intégrateur chez Audacy
http://www.zwiffer.org           http://www.audacy.fr
Mangeur de cigogne    http://mangeur-de-cigogne.info/