【问题标题】:Remove commands from php artisan list从 php artisan list 中删除命令
【发布时间】:2015-08-21 08:00:15
【问题描述】:

有没有办法从php artisan list 中删除一些命令?

我发现它太长了,我经常不得不滚动或做 grepping。例如,一些我不使用队列的项目,隐藏队列命令会很有用。

【问题讨论】:

  • 隐藏某些命令的另一个好处是,许多命令在生产环境中没有意义。

标签: php laravel


【解决方案1】:

例如,只需覆盖 ArtisanServiceProvider:

创建一个新的提供者,将其命名为 ProductionArtisanServiceProvider

php artisan make:provider ProductionArtisanServiceProvider

打开新的provider,改成如下

namespace App\Providers;

use Illuminate\Foundation\Providers\ArtisanServiceProvider as IlluminateProvider;

class ProductionArtisanServiceProvider extends IlluminateProvider
{
     protected $devCommands = [
       'AppName' => 'command.app.name',
     ];
}

你在上面看到我正在覆盖 $devCommands 完整列表

查看 Illuminate\Foundation\Providers\ArtisanServiceProvider

最后在注册函数中的 AppServiceProvider 中添加你的新提供者,我们确保它只在生产环境中加载

    if ($this->app->environment() == 'production') {
        $this->app->register(\App\Providers\ProductionArtisanServiceProvider::class);
    }

现在所有不必要的命令都消失了

【讨论】:

    【解决方案2】:

    没有什么好的方法可以做到这一点。大多数核心工匠命令列表存储在$commands 属性内的Illuminate\Foundation\Providers\ArtisanServiceProvider 类中。有些是直接从各自的服务提供商那里注册的,比如Illuminate\Queue\QueueServiceProvider 中的队列。所以理论上你可以在外面评论它们,但你首先不应该在vendor目录中进行任何更改,因为它们可以在任何更新时撤消。

    如果您发现自己不得不经常检查命令列表,最好花一点时间来记忆至少您经常使用的命令,因为这会使您的工作流程 更高效。


    如果您有任何机会使用 zshOh My Zsh,那么您可以使用包含的 laravel5 插件,该插件在您的终端中提供自动完成功能,用于所有已注册的 Laravel 命令。只需写 php artisan 并按 TAB 即可自动完成命令列表,无需滚动 :)。

    【讨论】:

      【解决方案3】:

      根据 Bogdan 的更新,没有从工匠列表中删除命令的好方法。一种可用的选项是用具有相同 $signature. 的新命令覆盖现有命令

      【讨论】:

        【解决方案4】:

        如果您感兴趣的所有命令都以相同的前缀开头,例如prefix:,您可以使用artisan list prefix 列出它们。

        【讨论】:

          【解决方案5】:

          接受的答案(史蒂文的)是从列表中删除开发命令的一种很好且干净的方法,这当然有很大帮助,但并不能清除所有内容。例如,您仍然可以使用 'inspiration'、'make:migration' 等命令,并且您可能已安装的任何其他软件包可能会在列表中添加一两个以上的项目。

          如果你的情况和我的一样,只是想从列表中隐藏命令(但不完全禁用它们),那么有一个非常简单的解决方案:

          创建一个带有“列表”签名的新命令。例如:

          /**
            * The name and signature of the console command.
            *
            * @var string
            */
          protected $signature = 'list';
          

          由于它是最后一个注册的,它会在框架调用'list'命令时执行。在命令句柄内,您可以使用:

          $this->getApplication()->all()
          

          获取已注册命令的列表。它将返回一个数组,其中键是命令名称,值是实际命令对象。然后,您可以使用它来决定显示哪些以及丢弃哪些。

          【讨论】:

            【解决方案6】:

            下车。我终于得到了一个很好的解决方案。使用 grep 创建我自己的 bash 别名。

            将此添加到我的 ~/.bashrc

            我所有的命令都以 mycompany:command 开头

            使用任何 3 个字母的快捷方式。 can 是我公司名称的前 3 个字母。

            alias can='php artisan | grep mycompany'
            

            【讨论】:

            • 这实际上并没有回答所提出的问题。 Grepping 输出是仅显示 某些选项的变通方法。它不执行从工匠列表中删除命令的技术方面。
            猜你喜欢
            • 2017-08-24
            • 2016-04-14
            • 2017-05-27
            • 2018-06-07
            • 2019-10-26
            • 2019-05-15
            • 2020-03-17
            • 2015-04-17
            • 1970-01-01
            相关资源
            最近更新 更多