- ^ Fondamentaux
- Principes de fonctionnement
- Utiliser jelix-scripts
- Créer une application
- Développement d'un module
- Les réponses: générer du contenu
- Définir une réponse générale personnalisée
- Faire une redirection
- Services web
- Effectuer des traitements en ligne de commande
- Définir des traitements communs à plusieurs actions
Chapitre: Effectuer des traitements en ligne de commande
« Services web | ^ Fondamentaux | Définir des traitements communs à plusieurs actions » |
− Table des matières
Jelix vous permet de lancer des actions spécialement en ligne de commande. Ceci est très pratique pour effectuer des traitements sur un serveur et les planifier.
Installation ¶
Pour lancer des actions en ligne de commande, il faut 3 éléments :
- un point d'entrée spécifique
- un contrôleur cmdline
- un fichier de configuration pour la ligne de commande
Les jelix-scripts vont vous permettre de créer ces éléments facilement.
Création du point d'entrée ¶
À l'aide des jelix-scripts ¶
Il se crée au moment de la création de l'application :
$ php jelix.php createapp -withcmdline
Avec cette commande, vous allez créer la structure d'une nouvelle application qui contiendra en plus un répertoire scripts contenant alors le point d'entrée cmdline : cmdline.php
Si vous avez déjà créé votre application, vous pouvez aussi utiliser la commande createentrypoint :
$ php jelix.php createentrypoint -type cmdline myscript
Cela créera un point d'entrée pour un script en ligne de commande sous le nom myscript.php dans le répertoire scripts de l'application.
Manuellement ¶
Vous pouvez créer le point d'entrée votre application/scripts/cmdline.php à la main. Voici son contenu :
<?php
require_once ('../application-cli.init.php');
require_once (JELIX_LIB_CORE_PATH.'jCmdlineCoordinator.class.php');
require_once (JELIX_LIB_CORE_PATH.'request/jCmdLineRequest.class.php');
$config_file = 'cmdline/config.ini.php';
$jelix = new jCmdlineCoordinator($config_file);
$jelix->process(new jCmdLineRequest());
?>
Notez les différences par rapport à un point d'entrée classique :
- un fichier
application-cli.init.php
, similaire à @@F@application.init.php@ mais définissant entre autres un répertoire temporaire différent (il peut sinon y avoir des problèmes de droits puisqu'à priori, on lance le script avec un utilisateur système différent de celui utilisé pour le serveur Web) - l'utilisation d'un objet jCmdlineCoordinator au lieu de jCoordinator
- l'utilisation d'un objet jCmdLineRequest au lieu de jClassicRequest
Création d'un contrôleur cmdline ¶
Pour pouvoir travailler en mode cmdline, vous allez devoir créer un contrôleur spécifique à la ligne de commande.
À l'aide des jelix-scripts ¶
Vous pouvez créer votre contrôleur en utilisant les jelix-scripts :
$ php jelix.php createmodule -cmdline foo // création du module foo avec un controller cmdline
ou
$ php jelix.php -cmdline foo bar // création du controller bar dans le module foo
Manuellement ¶
Pour créer le contrôleur manuellement, celui-ci ne devra pas hériter de jController comme habituellement, mais il devra hériter de jControllerCmdline.
voici l'exemple du contrôleur default.cmdline.php :
<?php
class defaultCtrl extends jControllerCmdLine {
function index() {
$rep = $this->getResponse(); // cmdline response by default
$rep->addContent("Hello, it works !");
return $rep;
}
}
?>
Création du fichier de configuration ¶
Si vous avez créé l'application avec l'option -withcmdline le fichier de configuration aura été généré pour vous.
Voici son emplacement : app/var/config/cmdline/config.ini.php
Si le fichier n'existe pas, vous pouvez très simplement le créer à la main en prenant modèle sur le fichier de configuration classic (app/var/config/index/config.ini.php)
Développement d'actions ¶
Pour lancer vos actions, vous allez certainement vouloir lui passer des paramètres et des options.
Options ¶
Déclaration ¶
Pour déclarer les options que l'on pourra passer à l'action en ligne de commande, il faut utiliser la variable de classe $allowed_options qui est un tableau.
protected $allowed_options = array(
'nom_action' => array('-nom_option' => true/false)
);
Si le nom de l'option vaut true cela signifie qu'une valeur est attendue après l'option.
Récupération ¶
Dans les actions de votre controller cmdline vous allez vouloir récupérer les options passées au script. Pour cela il faut utiliser la méthode option('-nom_option')
Exemple :
public function myscript() {
$myoption = $this->option('-nom_option');
}
Paramètres ¶
Déclaration ¶
Le mécanisme est le même pour les paramètres :
protected $allowed_parameters = array(
'nom_action' => array('nom_parametre' => true/false)
);
Ici si le nom du paramètre vaut true c'est qu'il est obligatoire, false sinon.
Récupération ¶
Dans les actions de votre controller cmdline vous allez vouloir récupérer les paramètres passés au script. Pour cela il faut utiliser la méthode param('nom_parametre')
Exemple :
public function myscript() {
$myparam = $this->param('nom_parametre');
}
Message d'aide ¶
Vous pouvez aussi gérer le message d'aide sur les commandes. Celui-ci se déclare dans la variable de classe $help :
public $help = array(
'nom_action' => 'message'
);
Nous allons voir dans la partie suivante comment se servir de ce message d'aide
Utilisation ¶
Pour utiliser vos scripts, c'est à dire vos actions de vos contrôleurs cmdline, rendez vous en ligne de commande dans le répertoire app/scripts
Il suffit alors de lancer le script cmdline.php suivi de l'action à lancer (en utilisant le sélecteur d'action) et suivi du/des options et du/des paramètres voulu
Exemple :
$ php cmdline.php module~controller:action -nom_option optionval nom_param
Pour afficher l'aide, il suffit de faire :
$ php cmdline.php help module~controller:action
Si vous voulez qu'un script soit dédié à l'action par défaut indiquée dans la configuration, vous devez alors indiquer le paramètre true au constructeur de jCmdlineRequest dans le point d'entrée :
<?php
...
$jelix->process(new jCmdLineRequest(true));
...
?>
Ainsi vous n'avez plus à indiquer l'action en paramètre du script. Mais bien sûr, vous ne pouvez plus exécuter d'autres actions avec ce script. L'exemple précédent devient :
$ php cmdline.php -nom_option optionval nom_param
Et pour obtenir l'aide, il y a juste à faire
$ php cmdline.php help