This document is for CakePHP's development version, which can be significantly different
from previous releases.
You may want to read
current stable release documentation instead.
En plus d’un framework web, CakePHP fournit aussi un framework de console pour créer des outils et applications en ligne de commande. Les applications sur console sont idéales pour traiter diverses tâches en arrière-plan ou opérations de maintenance qui influent sur la configuration existante de votre application, vos modèles, plugin et logique de domaine.
CakePHP propose plusieurs outils de console pour interagir avec les fonctionnalités de CakePHP telles que l’internationalisation et le routage, qui vous permettent d’introspecter votre application et des générer des fichiers correspondant.
La console CakePHP utilise un système de type dispatcher pour charger des commandes, parser leurs arguments et appeler la bonne commande. Les exemples qui suivent utilisent bash ; cependant la console CakePHP est compatible avec n’importe quel shell *nix et Windows.
Une application CakePHP contient les répertoires src/Command, src/Shell et src/Shell/Task, qui contiennent ses shells et ses tâches. Elle est aussi livrée avec un exécutable dans le répertoire bin:
$ cd /path/to/app
$ bin/cake
Note
Pour Windows, il faut taper la commande bin\cake
(notez le backslash).
Si vous lancez la Console sans arguments, vous obtiendrez la liste des commandes disponibles. Vous pouvez ensuite lancer une de ces commandes en tapant son nom:
# lancer le shell du serveur
bin/cake server
# lancer le shell des migrations
bin/cake migrations -h
# lancer bake (avec un préfixe de plugin)
bin/cake bake.bake -h
Vous pouvez appeler des commandes de plugin sans le préfixe du plugin si le nom
de la commande n’entre pas en collision avec un shell de l’application ou du
framework. Dans le cas où deux plugins proposent une commande avec le même nom,
l’alias court correspondra au plugin chargé en premier. Vous pouvez toujours
utiliser le format plugin.command
pour faire référence à une commande de
manière non ambigüe.
Par défaut, CakePHP cherchera automatiquement toutes les commandes dans votre
application et vos plugins. Quand vous créerez des applications autonoms sur
console, vous voudrez peut-être restreindre le nombre de commandes accessibles.
Vous pouvez utiliser le crochet console()
de Application
pour limiter et
renommer les commandes exposées:
// dans src/Application.php
namespace App;
use App\Command\UserCommand;
use App\Command\VersionCommand;
use Cake\Console\CommandCollection;
use Cake\Http\BaseApplication;
class Application extends BaseApplication
{
public function console(CommandCollection $commands): CommandCollection
{
// Ajouter par nom de classe
$commands->add('user', UserCommand::class);
// Ajouter une instance
$commands->add('version', new VersionCommand());
return $commands;
}
}
Dans cet exemple, seules les commandes help
, version
et user
seraient disponibles. Consultez la section Commands pour savoir
comment ajouter des commandes dans vos plugins.
Note
Quand vous ajoutez plusieurs commandes qui utilisent la même classe Command,
la commande help
affichera l’option la plus courte.
Dans certains cas, vous aurez besoin de renommer des commandes, ou de créer des commandes imbriquées ou des sous-commandes. La découverte automatique des commandes ne fera pas cela, cependant vous pouvez déclarer vos commandes pour créer la dénomination désirée.
Vous pouvez personnaliser les noms de commandes en définissant chaque commande dans votre plugin:
public function console(CommandCollection $commands): CommandCollection
{
// Ajouter des commandes avec une dénomintaion imbriquée
$commands->add('user dump', UserDumpCommand::class);
$commands->add('user:show', UserShowCommand::class);
// Renommer entièrement une commande
$commands->add('lazer', UserDeleteCommand::class);
return $commands;
}
Quand vous réécrivez le crochet console()
de votre application, pensez à
appeler $commands->autoDiscover()
pour ajouter des commandes de CakePHP, de
votre application, et des plugins.
Si vous avez besoin de renommer ou supprimer une commande attachée, vous pouvez
utiliser l’événement Console.buildCommands
dans le gestionnaire d’événements
de votre application pour modifier les commandes disponibles.
Rendez-vous au chapitre Objets Command pour créer votre première commande. Puis, pour en savoir plus sur les commandes:
En ligne de commande (CLI), et spécifiquement dans vos shells et vos tâches,
env('HTTP_HOST')
et les autres variables d’environnement spécifiques au
serveur web ne sont pas définies.
Si vous générez des rapports ou si vous envoyez des mails qui utilisent00
Router::url()
, ils contiendront l’hôte par défaut http://localhost/
, et
donc ils produiront des URL invalides. Dans un tel cas, vous devez spécifier le
domaine manuellement. Vous pouvez utiliser pour cela la valeur
App.fullBaseUrl
de Configure depuis votre bootstrap ou votre configuration,
par exemple.
Pour envoyer des mails, vous devrez fournir une classe Email avec l’hôte à partir duquel vous voulez envoyer le mail:
use Cake\Mailer\Email;
$email = new Email();
$email->setDomain('www.example.org');
Cela suppose que les IDs du message généré soient valides et correspondent au domaine à partir duquel les mails sont envoyés.