Raccourcis : Contenu - rubriques - sous rubriques
EN FR

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".


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

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.


  // pour récupérer un paramètre en dehors d'un contrôleur
  $myfooValue = $GLOBALS['gJCoord']->request->getParam('foo');

Mais dans un contrôleur, vous avez à votre disposition des méthodes "raccourcis" :


    $myfooValue = $this->param('foo');

Les autres propriétés de jRequest qui peuvent être utiles :

type Pour connaître le type de la requête
urlScriptPath Le chemin dans l'URL jusqu'au script
urlScriptName Le nom du script (le nom du fichier point d'entrée)
urlPathInfo La partie pathinfo de l'URL
params Les paramètres de la requête

Quelques méthodes utiles :

  • getIp(): pour récupérer la vraie IP de l'utilisateur (tient compte des proxy, firewall etc.)
  • isAjax(): pour savoir si la requête est une requête ajax ou pas.