forked from jelix/jelix-manuel-fr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
requests.gtw
109 lines (75 loc) · 4.13 KB
/
requests.gtw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
~~LANG:EN@enman:requests~~
===== Un objet jRequest pour chaque type de requête =====
Un objet jRequest prend en charge le traitement des données en entrée afin de
les rendre disponibles facilement au framework et plus spécifiquement aux
actions. Il permet entre autres de déterminer le module et l'action à exécuter.
Il y a plusieurs types d'objets jRequest qui permettent de traiter différentes
données en entrée. En effet, on ne récupère pas les données en entrée pour une
page HTML (situées dans l'URL pour une requête GET ou URL-encodées dans son
corps pour une requête POST) de la même manière que celles d'un appel SOAP (les
données étant situées dans le corps de la requête HTTP sous forme XML).
À chaque type d'objet jRequest correspond un ou plusieurs formats de sortie
autorisés, donc un ou plusieurs objets jResponse permis.
Les objets jRequest disponibles sont :
* classic : pour les requêtes classiques dont le type de réponse est
indifférent (HTML, texte, redirection...),
* soap : pour les requêtes de services SOAP. La réponse sera au format SOAP.
* xmlrpc : pour les requêtes XML-RPC. La réponse sera nécessairement en
XML-RPC,
* jsonrpc : pour les requêtes JSON-RPC. La réponse sera nécessairement en
JSON-RPC.
D'autres sont possibles biens sûr.
===== Points d'entrée =====
Un point d'entrée est un script par lequel passe une partie ou toutes les
actions. Seuls les points d'entrée sont en principe accessibles depuis le Web,
donc dans le répertoire www de l'application.
Ce sont eux qui instancient un objet jCoordinator, un objet de type jRequest qui
analysera la requête, et qui indiquent le fichier de configuration à utiliser.
Il faut donc un fichier d'entrée PHP pour chaque type de requête que l'on veut
utiliser. Et il y aura en général une configuration spécifique à chaque point
d'entrée.
Un point d'entrée contient un bout de code comme celui-ci, ici le point d'entrée
index.php pour les requêtes "normales".
<code php>
// chargement du fichier d'initialisation de l'application
require_once ('../../testapp/application.init.php');
// le fichier de configuration à utiliser
$config_file = 'index/config.ini.php';
// instanciation du coordinateur
$jelix = new jCoordinator($config_file);
// instanciation d'un objet de type jRequest
require_once (JELIX_LIB_CORE_PATH.'request/jClassicRequest.class.php');
$request = new jClassicRequest();
// exécution de l'action
$jelix->process($request);
</code>
On ne créera différents points d'entrées que dans les cas suivants :
* un point d'entrée par type de requête
* un point d'entrée spécifique à un ou plusieurs modules spécifiques.
Si on veut accéder aux mêmes actions d'un module à travers plusieurs points
d'entrées, ce n'est théoriquement pas possible. Si vous pensez avoir vraiment
besoin de cela, interrogez vous plutôt sur la nécessité d'avoir plusieurs
applications (et c'est souvent le vrai besoin), sachant qu'elles peuvent
partager la même base de données, partager des modules, partager le même
répertoire www.
===== API =====
Durant l'exécution de l'action, l'objet jRequest correspondant à la requête est
accessible via la propriété ''request'' du coordinateur. Ce dernier est
accessible via une variable globale $gJCoord.
<code php>
// pour récupérer un paramètre en dehors d'un contrôleur
$myfooValue = $GLOBALS['gJCoord']->request->getParam('foo');
</code>
Mais dans un contrôleur, vous avez à votre disposition des méthodes "raccourcis" :
<code php>
$myfooValue = $this->param('foo');
</code>
Les autres propriétés de @@C@jRequest@@ qui peuvent être utiles :
| @@P@type@@ | Pour connaître le type de la requête |
| @@P@urlScriptPath@@| Le chemin dans l'URL jusqu'au script |
| @@P@urlScriptName@@ | Le nom du script (le nom du fichier point d'entrée) |
| @@P@urlPathInfo@@ | La partie pathinfo de l'URL |
| @@P@params@@ | Les paramètres de la requête |
Quelques méthodes utiles :
* @@M@getIp()@@: pour récupérer la vraie IP de l'utilisateur (tient compte des proxy, firewall etc.)
* @@M@isAjax()@@: pour savoir si la requête est une requête ajax ou pas.