本文概述
- 创建并注册命令
- 命令结构
- 列印文字
- 命令输入:参数和选项
- 例子
- 从控制器或路径执行命令
此外, 你可能想用自己的命令扩展artisan, 以创建和自动执行Laravel项目的独特任务。命令通常存储在app / Console / Commands目录中, 但是, 只要Composer可以加载命令, 你就可以自由选择自己的存储位置。
在本文中, 你将学习如何在Laravel 5.3中轻松为工匠创建自定义命令。
创建并注册命令 Laravel帮助你简化了一切, 它已经集成了make:console NewClassName命令来加快你的开发过程。该命令将类的名称作为第一个参数, 并且可以选择使用command选项直接指定命令的名称, 而无需修改类。
要创建名为quiz:start的新控制台命令, 请使用类名称QuizStart在控制台中执行以下命令:
php artisan make:command QuizStart --command=quiz:start
注意:如果不想使用控制台, 请在” 命令结构” 中复制示例类, 然后根据需要更改文件和类的名称。还要记住, 在早期版本的Laravel < 5.2中, 你需要使用make:console而不是make:command。
这应该在/ app / console / commands目录中使用App \ Console \ Commands命名空间创建QuizStart类。
最后, 我们的命令未注册, 因此我们需要将其添加到$ commands数组中的/app/console/Kernel.php文件中(提供类路径和名称):
protected $commands = [// Commands\Inspire::class, 'App\Console\Commands\QuizStart'];
使用php artisan cache:clear清除缓存并尝试使用先前给定的名称执行命令:
php artisan quiz:start
不出所料, 该命令什么都不做, 现在你只需要学习如何处理该命令即可。
命令结构 要自定义命令和描述的名称, 请直接在类中更改名称, 命令的所有逻辑都将存储在handle函数中。
<
?php#/App/Console/Commands/QuizStart.phpnamespace App\Console\Commands;
use Illuminate\Console\Command;
class QuizStart extends Command{/*** The name and signature of the console command.** @var string*/protected $signature = 'quiz:start';
/*** The console command description.** @var string*/protected $description = 'Command description';
/*** Create a new command instance.** @return void*/public function __construct(){parent::__construct();
}/*** Execute the console command.** @return mixed*/public function handle(){//}}
列印文字 要将输出发送到控制台, 可以在以下方法之间进行选择:行, 信息, 注释, 问题和错误方法。这些方法都将使用适当的ANSI颜色作为其用途。
/** * Execute the console command. * * @return mixed */public function handle(){$this->
line("Some text");
$this->
info("Hey, watch this !");
$this->
comment("Just a comment passing by");
$this->
question("Why did you do that?");
$this->
error("Ops, that should not happen.");
}
命令输入:参数和选项 在命令中包含参数和选项
如果未设置期望功能的参数或选项, 则即使使用参数执行命令, 命令也将无法工作。
在Laravel中, 我们直接在字符串中定义参数和选项的是签名属性(命令名称)(与旧版本的Laravel不同):
/** * The name and signature of the console command. * * @var string */protected $signature = 'quiz:start {user} {age} {--difficulty=} {--istest=}';
参数以简单的{argumentName}语法和选项为{– optionName =}在我们的命令中注册。所以现在我们不需要在类中创建get选项和get arguments方法。
它的语法很容易理解, 基本上所有这些都是在命令中使用参数和选项的方式(如果你需要更多详细信息, 请阅读文档):
- 参数:quiz:start {参数}。
- 可选参数(请注意参数名称旁边的问号):quiz:start {argument?}。
- 具有默认值的参数:quiz:start {argument = defaultValue}。
- 布尔选项:quiz:start – myOption。
- 具有值的选项:quiz:start – myOption =。
- 具有值和默认值的选项:quiz:start – myOption = 12。
如果你的命令需要一些值才能工作(参数), 则需要访问这些值才能在命令中使用它们。要完成此任务, 可以使用arguments和option方法:
/** * Execute the console command. * * @return mixed */public function handle(){// Get single Parameters$username = $this->
argument('user');
$difficulty = $this->
option('difficulty');
// Get all$arguments = $this->
arguments();
$options = $this->
options();
// Stop execution and ask a question $answer = $this->
ask('What is your name?');
// Ask for sensitive information$password = $this->
secret('What is the password?');
// Choices$name = $this->
choice('What is your name?', ['Taylor', 'Dayle'], $default);
// Confirmationif ($this->
confirm('Is '.$name.' correct, do you wish to continue? [y|N]')) {//}}
例子 以下功能将在控制台中创建一个交互式测验, 你需要回答所有这些测验。填写完测验后, 它将显示你键入的答案。
/** * Execute the console command. * * @return mixed */public function handle(){$difficulty =$this->
option('difficulty');
if(!$difficulty){$difficulty = 'easy';
}$this->
line('Welcome '.$this->
argument('user').", starting test in difficulty : ". $difficulty);
$questions = ['easy' =>
['How old are you ?', "What is the name of your mother?", 'Do you have 3 parents ?', 'Do you like Javascript?', 'Do you know what is a JS promise?'], 'hard' =>
['Why the sky is blue?', "Can a kangaroo jump higher than a house?", 'Do you think i am a bad father?', 'why the dinosaurs disappeared?', "why don't whales have gills?"]];
$questionsToAsk = $questions[$difficulty];
$answers = [];
foreach($questionsToAsk as $question){$answer = $this->
ask($question);
array_push($answers, $answer);
}$this->
info("Thanks for do the quiz in the console, your answers : ");
for($i = 0;
$i <
= (count($questionsToAsk) -1 );
$i++){$this->
line(($i + 1).') '. $answers[$i]);
}}
文章图片
从控制器或路径执行命令 显然, 当我们使用ask方法时, 它不起作用, 但是对于其他方法, 你可以使用以下命令执行命令:
$exitCode = Artisan::call('quiz:start', ['user' =>
'Carlos', '--difficulty' =>
'hard']);
【如何为Laravel 5.3创建自定义控制台命令(工匠)】如果你需要有关工匠的更多信息, 可以在此处阅读文档。玩得开心 !
推荐阅读
- 如何在Laravel中使用PHP Office创建Excel文件
- 如何在Laravel中发送电子邮件(Gmail,Outlook和Zoho)
- QQ输入法自定义图片怎样弄?
- QQ输入法图标点亮办法
- qq输入法怎样改字体?
- IE浏览器弹出QQ输入法安全提示怎样办?
- QQ输入法怎样输入特殊标记?
- QQ输入法设置为默认输入法图文详细教程
- QQ输入法设置默认输入为英文图文详细教程