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-compileddownenvinspiremigrateoptimizeup命令。如果想将更多命令列入白名单,可以将它们添加到配置文件tinker.phpcommands数组中:

'commands' => [
    // App\Console\Commands\ExampleCommand::class,
],

不应混淆的类 通常,Tinker会根据需要在Tinker中自动为类加上别名。但是,我们可能不希望对某些类使用别名。可以通过在配置文件tinker.phpdont_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')));
    }
}

查看笔记

扫码一下
查看教程更方便