Laravel Artisan 命令
简介
Artisan是Laravel带的命令集合。它提供了许多有用的命令,可以在构建应用程序时为我们提供很大的帮助。要查看所有可用Artisan命令的列表,可以使用以下list命令:
$ php artisan list
每个命令还包括一个“帮助”手册,该手册显示并描述命令的可用参数和选项。在命令名称前加上help:
$ php artisan help make:controller
显示如下
Usage:
make:controller [options] [--] <name>
Arguments:
name The name of the class
Options:
-m, --model[=MODEL] Generate a resource controller for the given model.
-r, --resource Generate a resource controller class.
-p, --parent[=PARENT] Generate a nested resource controller class.
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--env[=ENV] The environment the command should run under
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Help:
Create a new controller class
Tinker(REPL)
Laravel Tinker是Laravel框架的强大REPL,由PsySH软件包提供支持。
安装
默认情况下,所有Laravel应用程序都包括Tinker。但是,如果需要,可以使用Composer手动安装它:
$ composer require laravel/tinker
用法
Tinker允许我们在命令行上与整个Laravel应用程序进行交互,包括Eloquent ORM,Jobs,Event等。要进入Tinker环境,请运行Artisan 命令tinker
:
$ php artisan tinker
我们可以使用以下vendor:publish
命令发布Tinker的配置文件:
$ php artisan vendor:publish --provider="Laravel\Tinker\TinkerServiceProvider"
命令白名单
tinker 使用白名单来确定允许哪些Artisan命令在其中运行。默认情况下,白名单中的命令为clear-compiled
,down
,env
,inspire
,migrate
,optimize
和up
命令。如果想将更多命令列入白名单,可以将它们添加到配置文件tinker.php
的commands
数组中:
'commands' => [
// App\Console\Commands\ExampleCommand::class,
],
不应混淆的类
通常,Tinker会根据需要在Tinker中自动为类加上别名。但是,我们可能不希望对某些类使用别名。可以通过在配置文件tinker.php
的dont_alias
数组中列出这些类:
'dont_alias' => [
App\User::class,
],
自定义命令
除了Artisan自带的命令外(可以使用 list
命令查看),我们还可以构建自己的自定义命令。命令通常存储在app/Console/Commands
目录中。但是,只要Composer可以加载命令,我们就可以自由的给自己的命令选择存储位置。
生成指令
要创建新命令,可以使用make:command
命令。该命令将在app/Console/Commands
目录中创建一个新的命令类。如果应用程序中不存在此目录,则会自动被创建。生成的命令将包括所有命令中都存在的默认属性和方法集:
$ php artisan make:command SendEmails
命令结构
生成命令后,应填写该类的signature和description属性,description属性是对命令的描述,将在list屏幕上显示命令时使用。signature是命令的名称,也就是说artisan后面的命令。handle方法是具体执行命令的内容,我们的命令的处理逻辑都是在该方法中定义
让我们看一个示例命令。请注意,我们能够将所需的所有依赖项注入到命令的handle方法中。Laravel服务容器将自动注入我们指定的依赖项:
<?php
namespace App\Console\Commands;
use App\DripEmailer;
use App\User;
use Illuminate\Console\Command;
class SendEmails extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'email:send {user}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Send drip e-mails to a user';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @param \App\DripEmailer $drip
* @return mixed
*/
public function handle(DripEmailer $drip)
{
$drip->send(User::find($this->argument('user')));
}
}