4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

artisan コマンドで独自クラスのスケルトンをつくる

Last updated at Posted at 2018-11-05

まえがき

Laravelを使ったことがある人は
artisan make:〇〇
コマンドでControllerやMiddleware作ったことがあると思いますが、開発をしていると〇〇Serviceや〇〇Adapterなど独自のクラスを同じように作りたい場面が出てきます。これはGeneratorCommandというクラスを継承すると簡単につくることができます。今回は〇〇Serviceというクラスを生成するコマンドをつくってみます。

コマンドクラスを生成

php artisan make:command ServiceMakeCommand

コマンドでServiceMakeCommand.phpが生成されます。このクラスにCommandではなくGeneratorCommandを継承させ、処理を書いていきます。

App/Console/CommandsにServiceMakeCommand.php
<?php

namespace App\Console\Commands;

use Illuminate\Console\GeneratorCommand;
use Symfony\Component\Console\Input\InputOption;

class ServiceMakeCommand extends GeneratorCommand
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'make:service {name} {--hogerable : use Hogerable trait}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Create a new service class';

    /**
     * The type of class being generated.
     *
     * @var string
     */
    protected $type = 'Service';

    /**
     * Get the stub file for the generator.
     *
     * @return string
     */
    protected function getStub()
    {
        return $this->option('hogerable')
                ? __DIR__.'/stubs/hogerable-service.stub'
                : __DIR__.'/stubs/service.stub';
    }

    /**
     * Get the default namespace for the class.
     *
     * @param  string  $rootNamespace
     * @return string
     */
    protected function getDefaultNamespace($rootNamespace)
    {
        return $rootNamespace.'\Services';
    }
}


これでphp artisan make:service クラス名でクラスを生成するコマンドができました。今回は--hogerableオプションがある場合はHogerableトレイトをuseしたクラス生成することにしました。

次にstubという生成するクラスの骨組みを書いたファイルを用意します。

app/Console/Commands/stubs/service.stub
<?php

namespace DummyNamespace;

use App\Services\BaseService;

class DummyClass extends BaseService
{

}
app/Console/Commands/stubs/hogerable-service.stub

<?php

namespace DummyNamespace;

use App\Services\BaseService;
use App\Services\Hogerable;

class DummyClass extends BaseService
{
    use Hogerable;
}

最後にapp/Console/Kernel.phpにServiceMakeCommandを登録しましょう。

php artisan make:service FooService

app/Services/FooService.php
<?php

namespace App\Services;

use App\Services\BaseService;

class FooService extends BaseService
{

}

php artisan make:service BarService --hogerable

app/Services/BarService.php
<?php

namespace App\Services;

use App\Services\BaseService;
use App\Services\Hogerable;

class BarService extends BaseService
{
    use Hogerable;
}

これらが生成されればOKです。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?