【问题标题】:How to hide default artisan commands from "php artisan list" of commands?如何从命令的“php artisan list”中隐藏默认的 artisan 命令?
【发布时间】: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() 函数/进程。

【问题讨论】:

  • 您只想隐藏命令吗?还是禁用它?
  • 禁用。但想知道如何同时做这两者 - 一起或分开。

标签: php laravel command-line-interface laravel-5.4 laravel-artisan


【解决方案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;等等……
  • 我不知道有没有什么好的方法可以做到这一点,但我会在回家时尝试循环
猜你喜欢
  • 2015-08-21
  • 2018-06-07
  • 2019-10-26
  • 2021-02-11
  • 2019-12-26
  • 2020-01-30
  • 2020-03-17
  • 2015-04-17
  • 1970-01-01
相关资源
最近更新 更多