在laravel 5.2内核控制台

时间:2016-04-12 10:14:02

标签: php laravel laravel-5.2 artisan

我在内核命令中工作,我需要更改旧命令:

旧命令是:

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"那时也没有看到旧的命令。

有人帮我吗?

4 个答案:

答案 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 /

中删除旧的命令文件

这应该有用。