你是对的,你确实需要为每个方法一个新的 Artisan 命令(或者更确切地说是一个类)。但是,您所要做的就是在 中注册每个文件app/Console/Kernel.php
,如果您决定稍后更改语法,Laravel 会$signature
自动将其接收到任何更改,而无需重命名任何文件。
对于您提到的 Laravel 示例,migrate,有一个目录,每个命令名称都有一个单独的文件(包括没有冒号的那个):
/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations
- 迁移-> MigrateCommand.php
- 迁移:安装-> InstallCommand.php
- 迁移:刷新-> RefreshCommand.php
- 迁移:重置-> ResetCommand.php
- 迁移:回滚-> RollbackCommand.php
- 迁移:状态-> StatusCommand.php
如果您有要重用的代码 ( DRY ) 请注意,如果您检查上述命令,其中一些命令会使用特征,例如Illuminate\Console\ConfirmableTrait - 它包含一个 confirmToProceed()方法,如果它在生产中运行,会询问用户如果他们真的想继续。
注意:Artisan 语法在 5.1 中发生了变化,从$name
(用一种相当复杂的方式指定参数和选项)到更简单 $signature
,它向后兼容。更多信息