Hey
,
J'avais prévenu que j'étais plus actif par mail que sur le forum, la preuve
.
J'étais parti sur l'idée suivante : on a le routage qui est fait et le dispatche appelle ce qu'on veut (classe, méthode, fonction, closure, flux … ce qu'on veut). Si on prend ton exemple, on va appeler une classe et une méthode.
Une fois dans notre classe, on peut connaître la méthode de requête (selon la terminologie HTTP) : $this->request->getMethod() // GET, POST, PUT, DELETE, TRACE etc. Mais de manière moins standard (c'est en cours de standardisation), la majorité des bibliothèques Javascript envoie l'en-tête HTTP X-Requested-With: XMLHttpRequest quand on envoie une requête XHR. Dans ce cas, on peut imaginer une autre méthode du genre $this->request->isAjax().
Ça nous offre deux possibilités.
La première, la plus triviale, c'est de traiter la méthode de requête dans une action commune :
class FooController {
public function BarAction ( … ) {
if($this->request->isAsynchronous())
…
switch($this->request->getMethod()) {
case 'get':
…
}
}
}
C'est une première façon de faire.
Mais comme dans Hoa, on peut tout configurer à souhait, grâce à Hoa_Core_Parameterizable et le zFormat, on va pouvoir dire au routeur qu'il peut rediriger sur : BarAction, BarActionAsync, BarActionGet, BarActionGetAsync etc.
On exprimerait ça sous la forme suivante :
'action.synchronous' => '(:action:U:)Action(:method:U:)'
pour les cas BarActionGet, BarActionPost etc., et :
'action.asynchronous' => '(:action:U:)Action(:method:U:)Async'
pour les cas avec XHR.
Je pensais partir sur la première idée au début mais ta réflexion m'a donné l'idée de la seconde. Et c'est même une très bonne idée. Je code ça de suite (je comptais le faire demain, mais l'idée est top et je veux tester).
Le nouveau Hoa_Controller, avec Hoa_Http, sera bientôt dans le trunk.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »