Raccourcis : Contenu - rubriques - sous rubriques
EN FR

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 de jCoordinator
  • l'utilisation d'un objet jCmdLineRequest au lieu de jClassicRequest
  • 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