我在内核命令中工作,我需要更改旧命令:
旧命令是:
php artisan crawl:author
现在我需要将它重命名为:
php artisan crawl-bq:author
在我的命令文件中,签名更改为:
protected $ signature =' crawl-bq:author';
我使用以下命令清理了工匠缓存:
php artisan cache:clear
php artisan config:cache
我的旧命令仍在工作,新命令也正常工作。但是当我看到工匠名单" php artisan list"那时也没有看到旧的命令。
有人帮我吗?
答案 0 :(得分:1)
旧命令是:
php artisan crawl:author
现在我们将其重命名为" crawl-bq:author"
php artisan crawl-bq:author (Will Work)
php artisan crawl-b:author (Will Work)
php artisan craw:author (Will Work)
php artisan crawl:author (Will Work)
解决方案
使用其他名称重命名,例如" newcrawl-bq:author"
php artisan crawl:author (Not work)
php artisan crawl-bq:author (Not work)
php artisan newcrawl-bq:author (Will work)
答案 1 :(得分:1)
经过很长一段时间后,我来到了我发现Laravel 5.2工匠控制台命令有错误或者没有错误的状态,因为根据初始模式匹配,至少会执行一个命令。
假设您在两个不同的命令文件中有两个签名,例如以下4种情况:
案例I:
protected $signature = 'crawl:author-usa';
protected $signature = 'crawl:author-uk';
或案例II:
protected $signature = 'crawl:authorusa';
protected $signature = 'crawl:authoruk';
或案例III:
protected $signature = 'crawl-bq:author-usa';
protected $signature = 'crawl-bq:author-uk';
或案例IV:
protected $signature = 'crawl-bq:authorusa';
protected $signature = 'crawl-bq:authoruk';
对于任何一种情况,如果你运行php artisan crawl:auther
命令然后对于案例I,它将显示模糊的错误,如:
[Symfony\Component\Console\Exception\CommandNotFoundException]
Command "crawl:author" is ambiguous (crawl:author-usa, crawl:author-uk).
对于其余3个案例,它将显示相同的模糊信息,但签名明智的文本会有所不同。
现在假设4种不同情况的以下签名:
案例I:
protected $signature = 'crawl:author-usa';
或案例II:
protected $signature = 'crawl:authorusa';
或案例III:
protected $signature = 'crawl-bq:author-usa';
或案例IV:
protected $signature = 'crawl-bq:authorusa';
对于任何一种情况,如果运行php artisan crawl:auther
命令,它将执行该命令。
对于这两种情况,由于Symfony / Cconsole find()函数而发生这种情况。这里使用以下表达式搜索确切的命令:crawl[^:]*[^:]*:author[^:]*[^:]*
。这意味着,如果任何签名crawl<anything>:author<anything>
与php artisan crawl:author
现在,如果我找到这个问题的解决方案,主要是需要在symfony/consle文件的509行附近更改public function find($name)
。或者,如果有可能覆盖此功能(我不确定如何完成此覆盖)。
我受到了@ Nadeem0035的启发,他在symfony/consle文件中提到了public function find($name)
附近的509行。如果我能在赏金期限内奖励赏金,我会很高兴,因为至少他向我展示了找到控制台命令的确切方案的方法。这就是投票的原因:)
答案 2 :(得分:0)
我复制了你提到的所有步骤,我没有问题更改签名 - Laravel似乎没有将工匠命令包含在配置缓存中,或者其他任何地方。如果文件名保持不变,则Composer dump-autoload与此无关。
我可以给出的唯一建议是检查Console / Kernel.php $命令,以确保没有加载重复的命令,并且所有签名都是应该的。也许其他一些命令仍在实现旧签名?
我意识到这是一个老问题。也许你已经设法解决了这个问题?
答案 3 :(得分:0)
您需要从app / Console / Commands /
中删除旧的命令文件这应该有用。