如何从命令的“php artisan list”中隐藏默认的 artisan 命令?

Posted

技术标签:

【中文标题】如何从命令的“php artisan list”中隐藏默认的 artisan 命令?【英文标题】:How to hide default artisan commands from "php artisan list" of commands? 【发布时间】:2017-08-24 20:36:17 【问题描述】:

我正在开发基于 Laravel 5.4 的 CLI 应用程序。

我已经创建了我的自定义命令,它们按预期工作。

我面临的问题是,每当我运行php artisan list 时,它都会显示所有命令——我的自定义命令和默认的工匠命令。

我只需要在打包的应用程序中显示我的自定义命令。

有没有办法解决这个问题?

我已经检查了https://laracasts.com/discuss/channels/general-discussion/remove-default-commands-from-artisan 和解决方案,因为它不适用于 Laravel 5.4。

我检查了Remove command from php artisan list,但它要求特定的命令。我想从php artisan list 中删除所有内置命令。

更新

我找到了一个肮脏的方式:

如果我从framework/src/Illuminate/Console/Application.php注释掉第58行

$this->bootstrap();

即https://github.com/laravel/framework/blob/5.4/src/Illuminate/Console/Application.php#L58 输出符合预期。

现在我正在寻找一种方法来停止/控制bootstrap() 函数/进程。

【问题讨论】:

您只想隐藏命令吗?还是禁用它? 禁用。但想知道如何同时做这两者 - 一起或分开。 【参考方案1】:

要隐藏来自php artisan list 的命令-这只会隐藏命令并且不会禁用它-

在讨论如何隐藏它之前,让我们看一下Illuminate\Console\Command对象内部的属性$hidden,默认情况下它是一个 false ,当你将它设置为 true 时,你会得到你所有的工匠列表隐藏。

要隐藏特定命令,您需要将此属性设置为隐藏在要隐藏其命令的每个类中,

例如,当你点击php artisan list时会提示如下列表:

.....
cache
  cache:clear          Flush the application cache
  cache:forget         Remove an item from the cache
  cache:table          Create a migration for the cache database table
.....

这意味着,负责clearing the cache的对象位于Illuminate\Cache\Console中。

现在隐藏 cache:clear 命令,在 Illuminate\Cache\Console 中,您将获得 ClearCommand.php 对象。

更新它并将属性 $hidden 设置为 true ,如下所示:

protected $hidden = true;

【讨论】:

感谢您的回答。我设法做到了,但是以不同的(希望)错误的方式。这是相关的代码示例 - github.com/EasyEngine/ee4-laravel/commit/… 。我想知道这会有什么副作用?我将重命名和打包我的 CLI 应用程序,并且不希望或不希望用户运行默认的工匠命令。 它禁用命令。我想当我覆盖引导过程时,我正在阻止其他命令注册。 你可以在控制台对象中通过return false实现这个manually来禁用它,例如命令cache:clear你可以通过在清除缓存内的handle方法中返回false来禁用它对象Illuminate\Cache\Console\ClearCommand;等等…… 我不知道有没有什么好的方法可以做到这一点,但我会在回家时尝试循环

以上是关于如何从命令的“php artisan list”中隐藏默认的 artisan 命令?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Python 程序中的命令行获取数据?

如何从核心转储文件中识别导致崩溃的完整命令

如何从 Magnolia CMS 的默认目录中替换现有命令

S3 复制命令给出错误 + 如何从复制命令中删除密钥

如何从文件中打开命令提示符

如何从正在处理的项目文件中访问 msbuild 命令行参数?