View Issue Details

IDProjectCategoryView StatusLast Update
0001640Common[All Projects] Generalpublic2016-08-08 01:36
ReporterXenosAssigned ToXenos 
PrioritynormalSeverityfeatureReproducibilityN/A
Status CloseResolutionfixed 
Product Version1.0.4 
Target VersionFixed in Version2.0.0 
Summary0001640: Gérer proprement les entrées (paramètres GET/POST) des pages
DescriptionDans l'idée:
• Chaque handler a des constantes donnant les noms des paramètres de l'URL
• J'ajoute un "IInputRetriever" à l'abstract class générale
• Celui-ci est un "InputRetrieverComposite", instancié en lui passant une liste de IInputRetriever, chacun d'eux représentant une entrée de la page
• Dans le handler, j'ajoute une classe statique qui instancie la liste des IInputRetriever de la page (l'abstract classe va alors se servir de cette liste pour construire le retriever composite et le passer en paramètre de son constructeur)
• Dans le code du handler, je peux alors demander $this->input->get(static::PARAM_GNAGNA), ce qui va appeler le retriver composite; si cette clef n'existe pas, il renverra une exception, et si elle existe, il appellera le retriever correspondant; ce retriever va alors faire le filter_input et m'envoyer chier avec une InputException si la donnée d'entrée est invalide

Du coup, coté handler, je n'aurai qu'une static method à faire (celle qui instancie la liste des IInputRetriver de la page) + la liste des constantes décrivant les paramètres de l'URI de la page.

Si je veux instancier un handler dans un autre (composition) alors je pourrai lui passer en paramètre un InputRetriverComposite dont chaque élément sera un InputRetrieverConstant, dont le rôle sera de renvoyer une valeur fixée par le code client (ie new gnagna({mavaleur}) et gnagna->get() renverra {mavaleur}).

Cela me donnera une structure solide, où je pourrai réutiliser les constantes de classe plutôt que d'aller mettre des "idCurrent=..." et autres "idSelected=..." en dur dans la vue des autres pages.

Si je veux bénéficier de l'auto-complétion -car là, je fais juste un new otherHandler(..., array({liste des InputRetriver}))- alors il me suffira de créer des static factory method dans mon handler qui prendront en paramètre des valeurs (les {mavaleur}) et qui sera en charge d'instancier le handler en lui passant des retriever constants.
TagsNo tags attached.
Attach Tags

Activities

Xenos

Xenos

2016-08-07 22:03

administrator   ~0002124

Finalement, les choses fonctionneront ainsi:
• Chaque handler définit la liste des paramètres qu'il prend en charge via getParameters(). Cette liste est un tableau associatif qui au nom du paramètre associe le IParameterRetriever
• Le handler instancié pour répondre à la requête recevra la liste des paramètres d'entrée dans $this->parameters, sous la forme d'un IParametersList. Il pourra lui demander la valeur d'un paramètre à la volée par $this->parameters->get({parameterName})
• Chaque handler définira les noms de ses paramètres dans des constantes de classe; donc, récupérer la valeur d'un paramètre dans le handler se fait via $this->parameters->get(static::ID)
• Ces constantes pourront être utilisées par les autres pages pour passer des paramètres à cette page (genre href="<?php html(View::URI . '?' . View::ID . '=' . rurl($myvalue)); ?>)
• On pourra instancier un handler tiers via "xxx::instanciateWithParameters($handlerFacade, IParametersList $parameters)". La liste de paramètres sera alors probablement constitué de ParameterConstRetriever, qui ne sont que des valeurs brutes encapsulées.

De cette manière, j'ai accès à la liste des paramètres d'un handler (getParameters).
Je peux utiliser le nom et l'URI d'un handler dans une autre page (xxx::URI, xxx::ID, etc)
Je peux passer des paramètres constants à un handler via new ParameterConstRetriever('gnagna')
L'abstract class des handlers se charge de passer les paramètres au handler instancié (en gros, le retour de ::getParameters() est utilisé comme IParametersList)

Issue History

Date Modified Username Field Change
2016-07-21 16:20 Xenos New Issue
2016-07-21 16:20 Xenos Status New => Accepted
2016-08-04 15:12 Xenostom Assigned To => Xenostom
2016-08-04 15:12 Xenostom Status Accepted => In progress
2016-08-07 22:03 Xenos Note Added: 0002124
2016-08-07 22:03 Xenos Status In progress => Ready
2016-08-07 22:03 Xenos Resolution open => fixed
2016-08-08 01:30 AutoUpdater Assigned To Xenostom => Xenos
2016-08-08 01:30 AutoUpdater Status Ready => Resolved
2016-08-08 01:30 AutoUpdater Fixed in Version => 2.0.0
2016-08-08 01:36 Xenos Status Resolved => Close