LaravelにTraitのジェネレーターを導入
LaravelでTraitを利用したい場合に、makeコマンドがなかったので用意しました。手動で作っても良いのですが複数人で開発する場合、ルールを統一して便利ツールとして利用していきたいですね。
[ 目次 ]
はじめに
こんばんは、香港に住んでいるWEBデベロッパーのなかむ(@nakanakamu0828)です。
今回はLaravelプロジェクトでTraitを利用する際に、makeコマンドでTraitをジェネレートできるようにしたいと思います。
デフォルトでは、Traitは用意されていません。
ググってみたところcomposerも見当たらず、Laravel 5.5 Trait Generator を参考にすることにしました。
※ Model内で発生する共通処理をTraitに切り出したいと思ってます。
■ 環境
ライブラリ | バージョン |
---|---|
PHP | ^7.1.3 |
Laravel | 5.6.* |
Comanndを作成
make:trait
コマンドでTraitを作成できるようにCommandクラスを用意します。
$ php artisan make:command TraitMakeCommand
TraitMakeCommand.php
が app/Console/Commands
ディレクトリに作成されたと思います。
内容を以下のように修正してください。
<?php
namespace App\Console\Commands;
use Illuminate\Console\GeneratorCommand;
class TraitMakeCommand extends GeneratorCommand
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $name = 'make:trait';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Create a new trait';
/**
* Get the stub file for the generator.
*
* @return string
*/
protected function getStub()
{
return __DIR__.'/stubs/trait.stub';
}
/**
* Get the default namespace for the class.
*
* @param string $rootNamespace
* @return string
*/
protected function getDefaultNamespace($rootNamespace)
{
return $rootNamespace.'\Traits';
}
}
Traitのスタブを用意
既に、TraitMakeCommand.php
内にも記載しましたが、/stubs/trait.stub
ファイルを用意します。このファイルはTraitクラスを作成するときのテンプレートのようなものです。
以下のような内容でファイルを作成してください。
<?php
namespace DummyNamespace;
trait DummyClass
{
//
}
Traitを作成
まず、Commandとして登録されているか php artisan list
コマンドを利用して確認してみましょう。
$ php artisan list | grep make
make
make:auth Scaffold basic login and registration views and routes
make:command Create a new Artisan command
make:controller Create a new controller class
make:event Create a new event class
make:exception Create a new custom exception class
make:factory Create a new model factory
make:helper Create a new helper
make:job Create a new job class
make:listener Create a new event listener class
make:mail Create a new email class
make:middleware Create a new middleware class
make:migration Create a new migration file
make:model Create a new Eloquent model class
make:notification Create a new notification class
make:policy Create a new policy class
make:provider Create a new service provider class
make:request Create a new form request class
make:resource Create a new resource
make:rule Create a new validation rule
make:seeder Create a new seeder class
make:test Create a new test class
make:trait Create a new trait
一番下に追加されましたか??
続いて UserTrait
を作成してみましょう。
$ php artisan make:trait UserTrait
app/Traits/UserTrait.php
が作成されます。
作成直後の内容は以下です。
<?php
namespace App\Traits;
trait UserTrait
{
//
}
これで無事Traitが作成できました。
最後に
Traitの作成方法は如何でしたか?
複数のクラスから共通利用したい処理で、親子関係にしたくない処理などTraitとして用意すると便利ですよね。