具有多个“方法”的自定义 artisan 命令(采用 migrate:install 等风格)

mtm*_*ald 2 laravel-4

我正在为我的 Laravel 4 应用程序创建一个自定义 artisan 命令 (foo)。我可以从用户指南中看到如何接受参数和选项,例如

php artisan foo argument --option
Run Code Online (Sandbox Code Playgroud)

但是,如果我想要一个具有许多“方法”的自定义 artisan 命令,其风格与某些内置 artisan 命令(例如migrate:install )相同,该怎么办?我想做一些类似的东西:

php artisan foo:baz argument --option
Run Code Online (Sandbox Code Playgroud)

基于:冒号分隔符实现不同方法的推荐方法是什么?到目前为止,我发现尝试的只是为每个“方法”创建一个全新的 artisan 命令。有更有效的方法吗?

Wil*_*ell 5

你是对的,你确实需要为每个方法一个新的 Artisan 命令(或者更确切地说是一个类)。然而,您所要做的就是在 中注册每个文件app/Console/Kernel.php,如果您决定稍后更改语法,Laravel 将自动选择任何更改,$signature而无需重命名任何文件。

\n\n

对于您提到的 Laravel 示例,migrate,有一个目录,每个命令名称都有一个单独的文件(包括没有冒号的命令名称):

\n\n

/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations

\n\n
    \n
  • 迁移 -> MigrateCommand.php
  • \n
  • 迁移:安装 -> InstallCommand.php
  • \n
  • 迁移:刷新 -> RefreshCommand.php
  • \n
  • 迁移:重置 -> ResetCommand.php
  • \n
  • 迁移:回滚-> RollbackCommand.php
  • \n
  • 迁移:状态 -> StatusCommand.php
  • \n
\n\n

如果您有想要重用的代码(DRY),请注意,如果您检查上述命令,其中一些命令会使用Traits,例如Illuminate\\Console\\ConfirmableTrait \xe2\x80\x93 ,其中包含一个 verifyToProceed()方法,如果它正在生产中运行,将询问用户是否确实要继续。

\n\n

注意:Artisan 语法在 5.1 中发生了变化,从$name(使用相当复杂的指定参数和选项的方式)到更简单的 $signature,它是向后兼容的。更多信息

\n