2015-03-24 10 views
5

Od laravel 5, to jest interes do mnie - jak się zarejestrować i korzystać z konsoli polecenie opakowaniu w laravel 5.Jak zarejestrować polecenie konsoli z pakietu w Laravel 5?

jak w laracast dyskutować https://laracasts.com/discuss/channels/tips/developing-your-packages-in-laravel-5, utworzyć strukturę katalogów, aby dodać paczkę autoload i stworzyć usługę dostawca

<?php namespace Goodvin\EternalTree; 

use Console\InstallCommand; 
use Illuminate\Support\ServiceProvider; 

class EternalTreeServiceProvider extends ServiceProvider 
{ 
    public function boot() 
    { 

    } 

    public function register() 
    { 
     $this->registerCommands(); 
    } 

    protected function registerCommands() 
    { 
     $this->registerInstallCommand(); 
    } 

    protected function registerInstallCommand() 
    { 
     $this->app->singleton('command.eternaltree.install', function($app) { 

      return new InstallCommand(); 
     }); 
    } 

    public function provides() 
    { 
     return [ 

      'command.eternaltree.install' 
     ]; 
    } 
} 

My InstallCommand.php skrypt zapisany w/src/Console

<?php namespace Goodvin\EternalTree\Console; 

use Illuminate\Console\Command; 
use Symfony\Component\Console\Input\InputOption; 
use Symfony\Component\Console\Input\InputArgument; 

class InstallCommand extends Command { 

    protected $name = 'install:eternaltree'; 
    protected $description = 'Command for EternalTree migration & model install.'; 

    public function __construct() 
    { 
     parent::__construct(); 
    } 

    public function fire() 
    { 
     $this->info('Command eternaltree:install fire'); 
    } 

} 

zarejestrować usługodawcy app.php & wykonać zrzutu autoLoad. Ale gdy próbuję wykonać

php artisan eternaltree:install 

to pokaż mi

[InvalidArgumentException] There are no commands defined in the "eternaltree" namespace. 

Myślę, że moje polecenia nie jest zarejestrowany przez usługodawcę, ponieważ lista php rzemieślnik nie pokazać moje polecenie. Czy ktoś może mi wyjaśnić, jaki jest właściwy sposób rejestrowania poleceń we własnym pakiecie w Laravel 5?

Odpowiedz

3

znalazłem decyzję, było proste:

w registerInstallCommand() Dodaj

$this->commands('command.eternaltree.install'); 
18

Nie jest wymagane do korzystania z usług i pojemnik pojedyncza. Możesz po prostu umieścić swoją klasę komend w tablicy $this->commands([]); w sekcji register() swojego usługodawcy.

tak:

$this->commands([ 
    Acme\MyCommand::class 
]); 
+1

Czy jak zasugerował: - Wdrożone MyServiceProvider rozciąga ServiceProvider następnie '' 'register public function() { // $ this-> komendy ([ LaravelTypesController :: klasa ]); } '' ' - LaravelTypesController wydłuża komendę za pomocą $ signature, $ description i obsługuje metodę, ale nadal nie widać polecenia na php artisan | grep –

-1

Lepiej późno niż wcale.

Próbowano wywołać eternaltree:install, ale zarejestrowano polecenie jako install:eternaltree.

Twoja odpowiedź jest poprawna ... ale nie było potrzeby stosowania metod registerCommands() i registerInstallCommands(). Zachowaj odchudzony kod po prostu wywołując metodę commands() z metody register().