2016-04-12 37 views
6

Sto lavorando in comando del kernel in cui ho bisogno di cambiare i vecchi comandi:Rimuovere vecchio comando artigianale dal nuovo comando artigianale in laravel console 5.2 kernel

Vecchio comando è:

php artisan crawl:author 

ora ho bisogno di rinominarlo come:

php artisan crawl-bq:author 

Nella mia firma file di comando è cambiato come:

protected $ signature = 'crawl-bq: author';

ho pulito la cache artigianale utilizzando il comando seguente:

php artisan cache:clear 
php artisan config:cache 

È ancora il mio vecchio comando sta funzionando così come nuovo comando sta lavorando. Ma quando vedo la lista degli artigiani "php artisan list" allora anche i vecchi comandi non sono visti lì.

Qualcuno lì per aiutarmi?

+0

Hai rimosso il comando in app \ Console \ Kernel.php? Forse prova: 'php composer dump-autoload'. –

+0

@ThomasVanderVeen Sì, e ho eseguito questo comando php composer dump-autoload un paio di volte. Anche io ho impostato il progetto un paio di volte eliminando la cartella del venditore. Ciò significa che dovevo eseguire l'aggiornamento di compositore e il dump-autoload del compositore. – naf4me

+0

perché non usi un editor che ha una funzione di ricerca globale e cerchi il tuo progetto per "scrap: category" probabilmente ne hai ancora un residuo da qualche parte – tam5

risposta

1

Dopo molto tempo, sono giunto a dichiarare dove ho trovato che il comando della console artigiano di Laravel 5.2 ha un bug o non è un bug poiché almeno un comando verrà eseguito in base alla corrispondenza iniziale del modello.

Lasciate assumere, si hanno due firme in due diversi file di comando come seguire 4 casi:

Caso I:

protected $signature = 'crawl:author-usa'; 
protected $signature = 'crawl:author-uk'; 

O Caso II:

protected $signature = 'crawl:authorusa'; 
protected $signature = 'crawl:authoruk'; 

O Caso III:

protected $signature = 'crawl-bq:author-usa'; 
protected $signature = 'crawl-bq:author-uk'; 

o il caso IV:

protected $signature = 'crawl-bq:authorusa'; 
protected $signature = 'crawl-bq:authoruk'; 

Per entrambi i casi, se si esegue il comando php artisan crawl:auther poi per Caso I, mostrerà l'errore ambiguo come:

[Symfony\Component\Console\Exception\CommandNotFoundException] Command "crawl:author" is ambiguous (crawl:author-usa, crawl:author-uk).

Vi mostrerà la stessa ambigua messaggio per il resto 3 casi ma il testo saggio della firma sarebbe diverso.

Ora assumere la seguente firma per 4 casi diversi:

Caso I:

protected $signature = 'crawl:author-usa'; 

O Caso II:

protected $signature = 'crawl:authorusa'; 

O Caso III:

protected $signature = 'crawl-bq:author-usa'; 

O Caso IV:

protected $signature = 'crawl-bq:authorusa'; 

In entrambi i casi, se si esegue il comando php artisan crawl:auther, verrà eseguito tale comando.

Per questi due scenari, sta accadendo a causa della funzione symfony/Cconsole find(). Qui il comando esatto viene cercato da questa espressione: crawl[^:]*[^:]*:author[^:]*[^:]*. Ciò significa che, se ogni firma ha crawl<anything>:author<anything> corrisponderà con php artisan crawl:author

Ora, se vengo alla soluzione di questo problema, in primo luogo ha bisogno di cambiare public function find($name) vicino a 509 line all'indirizzo symfony/consle file. O se c'è la possibilità di sovrascrivere questa funzione (non sono sicuro di come si possa fare questo override).

Sono stato ispirato da @ Nadeem0035 in cui ha menzionato lo public function find($name) vicino alla riga 509 al file symfony/consle. Sarei stato felice se potessi assegnare la taglia in termini di tempo di abbondanza, almeno perché mi ha mostrato un modo per trovare lo scenario esatto del comando della console. Questo è il motivo per cui un tizio con voto positivo :)

+0

grazie :). Condividi anche la funzione modificata quando hai fatto. – Nadeem0035

0

Ho replicato tutti i passaggi che hai menzionato e non ho alcun problema nel cambiare le firme - Laravel non sembra includere comandi artigianali nella cache di configurazione, o in qualsiasi altro posto per quella materia. Il dump-autoload di Composer non è rilevante qui se i nomi dei file sono rimasti invariati.

L'unico consiglio che posso dare è controllare i comandi di Console/Kernel.php $ per accertarsi che non vengano caricati comandi duplicati e che tutte le firme siano come dovrebbero essere. Forse qualche altro comando sta ancora implementando la vecchia firma?

Mi rendo conto che questa è una vecchia domanda. Forse sei già riuscito a risolvere questo problema?

+0

Ho provato tutto il modo menzionato ma senza fortuna. – naf4me

+0

Ho aggiornato la mia domanda in base a come ho affrontato l'ultima volta. – naf4me

0

è necessario rimuovere il vecchio file di comando da app/Console/Comandi/

e questo dovrebbe funzionare.

+0

Ho fatto lo stesso come hai detto ma non ha funzionato. – naf4me

1

Old comando è:

php artisan crawl:author 

Ora abbiamo rinominarlo come "crawl-bq: autore"

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) 

Soluzione

rinominarlo con qualche altro nome come "newcrawl -bq: autore "

php artisan crawl:author (Not work) 
php artisan crawl-bq:author (Not work) 
php artisan newcrawl-bq:author (Will work) 
+0

ok se rinominerò la scansione in newcrawl-bq ma ho bisogno di crawl-bq. Questa cosa esatta non funziona per me. E voglio fare crawl-bq quando la scansione non deve funzionare. – naf4me

+0

Non credo sia possibile come vuoi perché i suoi comportamenti predefiniti per tutti i comandi. Non conosco il suo bug o qualcos'altro. Sappiamo comando effettivo per creare il modello è 'php artigianale marca: modello Post' Ma lavorare con questi comandi anche ' php artigianale m: modello Post' 'php artigianale ma: modello Post' – Nadeem0035

+0

sto anche cercando il comportamento del comando come da convenzione di denominazione, ma non l'ho ancora ottenuto. E sto cercando qualsiasi comando nella memorizzazione nella cache, ma non esiste lo sai. – naf4me