Artisan 开发
介绍
除了 Artisan 提供的命令外,您还可以为您的应用程序构建自己的自定义命令。您可以将自定义命令存储在 app/Console/Commands 目录中;不过,只要您的命令可以根据 composer.json 设置自动加载,您可以自由选择自己的存储位置。
构建命令
生成类
要创建新命令,您可以使用 make:console Artisan 命令,它将生成一个命令模板以帮助您入门:
生成新命令类
php artisan make:console FooCommand上面的命令将在 app/Console/Commands/FooCommand.php 生成一个类。
在创建命令时,可以使用 --command 选项来分配终端命令名称:
php artisan make:console AssignUsers --command=users:assign编写命令
生成命令后,您应填写类的 name 和 description 属性,这些属性将在 list 屏幕上显示您的命令时使用。
当执行命令时,将调用 fire 方法。您可以在此方法中放置任何命令逻辑。
参数和选项
getArguments 和 getOptions 方法是您可以定义命令接收的任何参数或选项的地方。这两个方法都返回一个命令数组,这些命令由一组数组选项描述。
定义 arguments 时,数组定义值表示以下内容:
[$name, $mode, $description, $defaultValue]参数 mode 可以是以下任何一种:InputArgument::REQUIRED 或 InputArgument::OPTIONAL。
定义 options 时,数组定义值表示以下内容:
[$name, $shortcut, $mode, $description, $defaultValue]对于选项,参数 mode 可以是:InputOption::VALUE_REQUIRED、InputOption::VALUE_OPTIONAL、InputOption::VALUE_IS_ARRAY、InputOption::VALUE_NONE。
VALUE_IS_ARRAY 模式表示在调用命令时可以多次使用开关:
InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY然后允许此命令:
php artisan foo --option=bar --option=bazVALUE_NONE 选项表示该选项仅用作“开关”:
php artisan foo --option检索输入
在执行命令时,您显然需要访问应用程序接受的参数和选项的值。为此,您可以使用 argument 和 option 方法:
检索命令参数的值
$value = $this->argument('name');检索所有参数
$arguments = $this->argument();检索命令选项的值
$value = $this->option('name');检索所有选项
$options = $this->option();编写输出
要将输出发送到控制台,您可以使用 info、comment、question 和 error 方法。每种方法都会使用适合其目的的 ANSI 颜色。
向控制台发送信息
$this->info('Display this on the screen');向控制台发送错误消息
$this->error('Something went wrong!');提问
您还可以使用 ask 和 confirm 方法提示用户输入:
向用户询问输入
$name = $this->ask('What is your name?');向用户询问秘密输入
$password = $this->secret('What is the password?');向用户询问确认
if ($this->confirm('Do you wish to continue? [yes|no]'))
{
//
}您还可以为 confirm 方法指定一个默认值,该值应为 true 或 false:
$this->confirm($question, true);调用其他命令
有时您可能希望从命令中调用其他命令。您可以使用 call 方法来实现:
$this->call('command:name', ['argument' => 'foo', '--option' => 'bar']);注册命令
注册 Artisan 命令
完成命令后,您需要在 Artisan 中注册它,以便可以使用它。通常在 app/Console/Kernel.php 文件中完成。在此文件中,您会在 commands 属性中找到命令列表。要注册命令,只需将其添加到此列表中。
protected $commands = [
'App\Console\Commands\FooCommand'
];当 Artisan 启动时,此属性中列出的所有命令将由服务容器解析并在 Artisan 中注册。