1

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

php artisan foo argument --option

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

php artisan foo:baz argument --option

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

4

2 回答 2

3

你是对的,你确实需要为每个方法一个新的 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,它向后兼容。更多信息

于 2016-08-20T12:08:18.497 回答
2

您只需要设置名称:

protected $name = 'foo:baz';
于 2013-11-12T01:34:16.680 回答