web-dev-qa-db-ja.com

Laravel 5-パッケージ用のArtisanコマンドの作成

私は http://laravel.com/docs/5.0/commands をフォローしていて、Laravel 5.で職人のコマンドを作成できます。しかし、どうすれば作成できますか?職人のコマンドとそれをパッケージにパッケージ化しますか?

17
user1995781

$this->commands()メソッドでregister()を使用して、サービスプロバイダー内にパッケージコマンドを登録できます。

namespace Vendor\Package;

class MyServiceProvider extends ServiceProvider {

    protected $commands = [
        'Vendor\Package\Commands\MyCommand',
        'Vendor\Package\Commands\FooCommand',
        'Vendor\Package\Commands\BarCommand',
    ];

    public function register(){
        $this->commands($this->commands);
    }
}
41
lukasgeiter

laravel 5.6では、非常に簡単です。

クラスFooCommand、

<?php

namespace Vendor\Package\Commands;

use Illuminate\Console\Command;

class FooCommand extends Command {

    protected $signature = 'foo:method';

    protected $description = 'Command description';

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

    public function handle() {
        echo 'foo';
    }

}

これはパッケージのserviceproviderです。 (ブート関数に$ this-> commands()部分を追加する必要があります)。

<?php
namespace Vendor\Package;

use Illuminate\Events\Dispatcher;
use Illuminate\Support\ServiceProvider;

class MyServiceProvider extends ServiceProvider {

    public function boot(\Illuminate\Routing\Router $router) {
        $this->commands([
            \Vendor\Package\Commands\FooCommand ::class,
        ]);
    }
}

これで、次のようなコマンドを呼び出すことができます

php職人foo:method

これは、コマンドハンドルメソッドから「foo」をエコーし​​ます。重要な部分は、パッケージサービスプロバイダーのブート関数内にコマンドファイルの正しい名前空間を与えることです。

1
vimuth