Maison > cadre php > Laravel > Comment créer des commandes de console Artisan personnalisées dans le framework Laravel 5.1

Comment créer des commandes de console Artisan personnalisées dans le framework Laravel 5.1

不言
Libérer: 2018-07-31 11:39:48
original
3165 Les gens l'ont consulté

Pour les débutants de Laravel, ils ne savent peut-être pas grand-chose sur les commandes de console Artisan personnalisées de Laravel. L'article suivant partagera avec vous un exemple de création d'une commande de console Artisan personnalisée dans le framework Laravel.

1. Mise en route

Laravel fournit de puissantes commandes de console via Artisan pour gérer la logique métier non-navigateur. Pour afficher toutes les commandes Artisan dans Laravel, vous pouvez l'exécuter dans le répertoire racine du projet :

php artisan list
Copier après la connexion

Le résultat correspondant est le suivant (capture d'écran partielle) :

Comment créer des commandes de console Artisan personnalisées dans le framework Laravel 5.1

où Nous connaissons déjà certains noms, comme créer une migration make:migration et exécuter une migration migrate, créer un modèle make:model, créer un contrôleur make:controller, etc.

Si vous souhaitez vérifier l'utilisation spécifique d'une certaine commande, par exemple, si nous voulons vérifier l'utilisation spécifique de la commande Artisan make:console, vous pouvez utiliser la commande suivante :

php artisan help make:console
Copier après la connexion

Le résultat correspondant est le suivant :

Comment créer des commandes de console Artisan personnalisées dans le framework Laravel 5.1

2. Commande de création

En plus de fournir des commandes de console riches, Artisan nous permet également de créer via la commande make:console nos propres commandes de console. Ci-dessus, nous avons utilisé la commande help pour vérifier l'utilisation de make:console. Suivons ce chemin et découvrons : créez la commande et exécutez-la pour obtenir les différents résultats souhaités.

Nous créons d'abord la commande la plus simple pour imprimer Hello LaravelAcademy, en utilisant la commande Artisan comme suit :

php artisan make:console HelloLaravelAcademy --command=laravel:academy
Copier après la connexion

où HelloLaravelAcademy est le nom de la commande, laravel:academy est la commande exécutée par la console , similaire à make:console.

Une fois l'exécution terminée, un fichier HelloLaravelAcademy.php sera généré dans le répertoire app/Console/Commands :

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class HelloLaravelAcademy extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = &#39;laravel:academy&#39;;
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = &#39;Command description.&#39;;
    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }
    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
    }
}
Copier après la connexion

où $signature est le nom de la commande exécutée sur la console , $description est la description de la commande et la méthode handle est la méthode appelée lors de l'exécution de la commande.

Ensuite, nous écrivons simplement la méthode handle comme suit :

public function handle()
{
    echo "Hello LaravelAcademy\n";
}
Copier après la connexion

D'accord, la commande la plus simple a été écrite, comment l'exécuter et afficher "Bonjour" sur la console. Qu'en est-il de LaravelAcademy " ?

3. Exécutez la commande

Avant d'exécuter la commande, vous devez l'enregistrer dans l'attribut $commands d'AppConsoleKernel :

protected $commands = [
     ...  //其他命令类
     \App\Console\Commands\HelloLaravelAcademy::class
];
Copier après la connexion

Ensuite, vous pouvez exécuter la commande Artisan suivante sur la console :

php artisan laravel:academy
Copier après la connexion
Copier après la connexion

Le terminal affichera :

Hello LaravelAcademy
Copier après la connexion

N'est-ce pas très simple ?

4. Entrées et sorties plus diversifiées

Bien sûr, le cas ci-dessus est le cas le plus simple, sans entrée ni sortie codée en dur. Dans l’environnement réel, il existe des exigences plus complexes et des entrées et sorties plus diverses. Discutons-en une par une ci-dessous.

Définir l'entrée

Comme mentionné ci-dessus, nous pouvons définir les paramètres et les options d'entrée en modifiant l'attribut $signature. Par exemple, ici, nous ajustons la chaîne après Hello ci-dessus pour. Contrôlé par les paramètres d'entrée, $signature peut être modifié comme suit :

protected $signature = &#39;laravel:academy {name}&#39;;
Copier après la connexion

Cette définition signifie que le nom est un paramètre obligatoire. Bien sûr, des entrées de paramètres plus personnalisés sont prises en charge :

{name?} //可选参数
{name=LaravelAcademy} //默认name值为LaravelAcademy
Copier après la connexion
<🎜. > Afin d'améliorer la robustesse du programme, nous avons modifié le nom pour avoir une valeur par défaut :

protected $signature = &#39;laravel:academy {name=LaravelAcademy}&#39;;
Copier après la connexion
Parfois nous passons également certaines options lors de l'exécution de la commande, comme par exemple s'il faut afficher les signes de ponctuation ( même si cela semble de mauvais goût, c'est pour tester), alors nous pouvons modifier l'attribut $signature comme suit :

protected $signature = &#39;laravel:academy {name=LaravelAcademy} {--mark}&#39;;
Copier après la connexion
Si --mark est passé lors de l'appel de la commande, cela signifie que la valeur est vraie, sinon, c'est faux. Si la valeur de l'option est saisie via les paramètres utilisateur, $signature peut être défini comme suit :

protected $signature = &#39;laravel:academy {name=LaravelAcademy} {--mark=}&#39;;
Copier après la connexion
De cette façon, l'utilisateur peut attribuer une valeur à l'option via = lors de la transmission. l'option. Bien entendu, comme les paramètres, on peut également spécifier une valeur par défaut pour l'option :

protected $signature = &#39;laravel:academy {name=LaravelAcademy} {--mark=!}&#39;;
Copier après la connexion

Obtenir l'entrée

Après avoir défini les paramètres d'entrée et options, comment obtenir leurs valeurs correspondantes ? Laravel nous fournit les méthodes correspondantes.

Vous pouvez obtenir les valeurs des paramètres via la méthode argument d'IlluminateConsoleCommand :

$name = $this->argument(&#39;name&#39;);
Copier après la connexion
Si la méthode argument est appelée sans paramètres, un tableau de toutes les valeurs des paramètres sera renvoyé.

Vous pouvez obtenir la valeur de l'option via la méthode d'option d'IlluminateConsoleCommand :

$mark = $this->option(&#39;mark&#39;);
Copier après la connexion
De même, appeler la méthode d'option sans paramètres renverra un tableau de toutes les valeurs d'option.

De cette façon, nous pouvons modifier la méthode handle de HelloLaravelAcademy comme suit :

public function handle()
{
    $name = $this->argument(&#39;name&#39;);
    $mark = $this->option(&#39;mark&#39;);
    $string = 'Hello '.$name;
    if($mark)
        $string .= $mark;
    echo $string."\n";
}
Copier après la connexion
De cette façon, nous saisissons la commande Artisan suivante dans la console :

php artisan laravel:academy
Copier après la connexion
Copier après la connexion
La sortie correspondante est :

Hello LaravelAcademy!
Copier après la connexion
Exécutez la commande Artisan suivante :

php artisan laravel:academy Laravel --mark=?
Copier après la connexion
La sortie correspondante est :

Hello Laravel?
Copier après la connexion

Invite de saisie

us Il est même possible pour les utilisateurs d'obtenir des paramètres d'entrée en entrant le nom dans la console. Tout d'abord, modifiez la méthode handle comme suit :

public function handle()
{
    $name = $this->ask(&#39;What do you want to say Hello?&#39;);
    echo "Hello ".$name."\n";
}
Copier après la connexion
Saisissez ensuite php artisan laravel : académie dans le terminal. La page interactive est la suivante :


Comment créer des commandes de console Artisan personnalisées dans le framework Laravel 5.1

Si vous saisissez des informations sensibles telles que des mots de passe, vous pouvez utiliser secret au lieu de la méthode demander.

Parfois, nous choisirons de continuer ou d'abandonner selon les souhaits de l'utilisateur :

public function handle()
{
    if($this->confirm(&#39;Do you want to continue?[y|n]&#39;)){
        $this->info("Continue");
    }else{
        $this->error("Interrupt");
    }
}
Copier après la connexion
La sortie correspondante est :

Comment créer des commandes de console Artisan personnalisées dans le framework Laravel 5.1

除了让用户手动输入外,还可以使用anticipate方法实现自动完成功能:

public function handle()
{
    $name = $this->anticipate(&#39;What is your name?&#39;, [&#39;Laravel&#39;, &#39;Academy&#39;]);
    $this->info($name);
}
Copier après la connexion

当然还可以使用choice方法为用户提供选择避免手动输入,用户只需选择对应索引即可:

public function handle()
{
    $name = $this->choice(&#39;What is your name?&#39;, [&#39;Laravel&#39;, &#39;Academy&#39;]);
    $this->info($name);
}
Copier après la connexion

对应交互页面如下:

Comment créer des commandes de console Artisan personnalisées dans le framework Laravel 5.1

编写输出

关于输出字符串,上面我们简单使用了echo语句,其实Laravel提供了更为强大和多样化的方法:

public function handle()
{
    $this->info("Successful!");
    $this->error("Something Error!");
    $this->question("What do you want to do?");
    $this->comment("Just Comment it!");
}
Copier après la connexion

执行php artisan laravel:academy对应输出如下:

Comment créer des commandes de console Artisan personnalisées dans le framework Laravel 5.1

表格

Artisan甚至可以输出表格:

public function handle()
{
    $headers = [&#39;Name&#39;, &#39;Email&#39;];
    $users = \App\User::all([&#39;name&#39;, &#39;email&#39;])->toArray();
    $this->table($headers, $users);
}
Copier après la connexion

执行php artisan laravel:academy对应输出为:

Comment créer des commandes de console Artisan personnalisées dans le framework Laravel 5.1

进度条

当然对于复杂耗时的命令,进度条是必不可少的,

public function handle()
{
    $this->output->progressStart(10);
    for ($i = 0; $i < 10; $i++) {
        sleep(1);
        $this->output->progressAdvance();
    }
    $this->output->progressFinish();
}
Copier après la connexion

执行php artisan laravel:academy对应输出为:

Comment créer des commandes de console Artisan personnalisées dans le framework Laravel 5.1

5、从CLI之外调用Artisan

除了在控制台执行Artisan命令之外,还可以通过代码在别处调用Artisan命令,比如其它Artisan命令、控制器、路由或其他。

路由

在路由闭包中我们可以通过Artisan门面的call方法来调用本节创建的命令:

//在路由中调用Artisan命令
Route::get(&#39;testArtisan&#39;,function(){
    $exitCode = Artisan::call(&#39;laravel:academy&#39;, [
        &#39;name&#39; => &#39;Laravel学院&#39;, &#39;--mark&#39; => &#39;!&#39;
    ]);
});
Copier après la connexion

其它Artisan命令

在一个Artisan命令中也可以调用另一个Artisan命令,还是通过call方法:

public function handle()
{
    $this->call(&#39;inspire&#39;);
}
Copier après la connexion

如果想要调用一个Artisan命令并阻止其所有输出,可以使用callSilent方法:

public function handle()
{
    $this->callSilent(&#39;inspire&#39;);
}
Copier après la connexion

除此之外,关于Artisan命令你还应该知道的是我们可以在创建的命令类的控制器或方法中注入任何依赖。这就意味着我们可以在命令类中使用注册到服务容器的所有类。

相关推荐:

laravel框架的启动过程分析

Laravel框架内置的Broadcast功能如何实现与客户端实时通信

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal