- ^ Fondamentaux
- Principes de fonctionnement
- 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
- Créer une interface d'administration
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 ¶
Le point d'entrée se crée lors de la création de l'application avec la commande createapp
ou n'importe quand avec la commande createentrypoint
.
$ 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 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 à la main. Il faut créer un fichier myapp/scripts/cmdline.php
(ou un autre nom). 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 à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 dejCoordinator
- l'utilisation d'un objet
jCmdLineRequest
au lieu dejClassicRequest
- un fichier de configuration spécifique
myapp/var/config/cmdline/config.ini.php
Il faut également déclarer le script dans le fichier myapp/project.xml
, au niveau de la balise entrypoints
:
<entrypoints>
<entry file="index.php" config="index/config.ini.php" />
<entry file="cmdline.php" config="cmdline/config.ini.php" type="cmdline"/>
</entrypoints>
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 :
# création du module foo avec un controller cmdline
$ php jelix.php createmodule -cmdline foo
ou
# création du controller bar dans le module foo
$ php jelix.php createctrl -cmdline foo bar
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 myapp/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