Skip to main content

什么是 Artisan

Artisan 是 Laravel 内置的命令行界面(CLI)工具。 它以项目根目录下的 artisan 脚本形式存在,提供了大量用于提升开发和运维效率的命令。 要查看可用命令列表,使用 list 命令。
要查看某个命令的使用方法,在前面加上 help
如果使用 Laravel Sail,请使用 sail artisan 代替 php artisan。 命令将在 Docker 容器内执行。

Tinker

Laravel Tinker 是一个 REPL 环境,可以在命令行中交互式操作 Eloquent 模型、Job、事件等整个应用程序。
启动后即可直接执行 PHP 代码。
Tinker 会实际修改数据。在生产环境执行时请务必谨慎。 它适合在本地或预发环境用于验证行为和调试。

自定义命令的创建

生成命令

使用 make:command 生成命令类的骨架。
生成的文件位于 app/Console/Commands/ImportProducts.php

命令的基本结构

生成的命令类包含三个主要要素:$signature$descriptionhandle()
在 Laravel 13 中还可以使用基于 PHP 属性的写法。

参数和选项的定义

$signature 中统一定义命令名、参数和选项。

获取参数和选项

handle() 方法内使用 argument()option() 获取值。

input() — 类型化访问器

使用 input() 方法可以以与 HTTP 请求相同的类型化访问器方式获取命令的参数或选项。
如果只想获取特定名称的值,可直接传入名称(会从参数和选项中搜索)。
相比 argument()option() 返回字符串,input() 的类型化访问器会转换为合适的类型。在需要类型安全地处理日期、数字、枚举等时非常方便。

与用户的交互

消息的输出

提供了向控制台输出带颜色消息的方法。

向用户提问

可以交互式地从用户接收输入。

进度条

在处理大量数据时可以直观地显示进度。
若需要手动细粒度控制,可以使用以下方式。

实用场景

数据导入命令

从 CSV 文件导入商品数据的实用命令示例。
1

生成命令

2

实现命令

3

执行命令

定期维护命令

用于定期删除旧数据等的维护命令示例。

与计划任务组合

创建的命令可以通过 routes/console.php 进行计划执行。 详情请参阅任务调度

命令的测试

可以使用 Laravel 的测试功能来验证 Artisan 命令的行为。
artisan() 方法可用的断言方法示例:

dev 命令

dev Artisan 命令可将本地开发所需的多个进程集中在一个终端窗口中一起启动。默认情况下,会并行运行 PHP 开发服务器、队列 Worker、通过 Pail 的日志监视以及 Vite 的资源编译。
内部使用名为 concurrently 的 npm 包管理进程。各进程都会带上标签并区分颜色,从终端输出可以很容易地区分哪个进程。任意一个进程失败时,其他所有进程也会自动停止。 默认执行的进程如下。
vite 进程会自动检测正在使用的 Node 包管理器(npm、pnpm、Yarn、Bun)并使用相应的执行命令。

dev 进程的自定义

dev 命令执行的进程可以通过 DevCommands 类自定义。通常在应用程序的 AppServiceProviderboot 方法内注册。register 方法接收命令字符串和可选的进程名。
在注册 Artisan 命令时,可以使用 artisan 方法,它会自动在前面加上 php artisan
同样,node 方法会在前面加上检测到的包管理器的执行命令(例如 npm run),nodeExec 方法会加上包管理器的 exec 命令(例如 npx)。
以与默认进程相同的名称注册进程时,会替换该默认进程。例如可以自定义使 server 进程使用其他端口。
也可以自定义终端中进程标签的颜色。可用的颜色方法有 bluepurplepinkorangegreenyellow。也可以向 color 方法传入自定义 hex 颜色。
如果希望只列出已注册的 dev 进程而不实际启动,可以使用 dev:list 命令。

dev 进程的过滤

使用 only 方法可以在执行 dev 命令时仅启动指定的进程。同样也可以通过 except 方法排除特定进程。
在本地开发中同时使用 Horizon、Reverb 等时,通过 DevCommands::artisan() 注册后,仅需一条 php artisan dev 即可全部启动,非常方便。

常用命令一览

最后修改于 2026年8月2日