如何从命令的“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 命令?的主要内容,如果未能解决你的问题,请参考以下文章