CodeIgniter4のCLIジェネレータのテンプレートをカスタマイズする

この記事は CodeIgniter Advent Calendar 2022 - Qiita の10日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。

CLIジェネレータとは?

CodeIgniter4 にはコマンドラインからアプリの各種ファイルを生成するCLIジェネレータが付属しています。 spark make:*コマンドです。

ジェネレータを利用することで、コントローラ、モデル、フィルタ、マイグレーションなどのファイルを作成できます。

モデルファイルの生成

例えば、以下のコマンドでモデルファイルを作成できます。

$ php spark make:model product

app/Models/Product.php が作成されました。

<?php

namespace App\Models;

use CodeIgniter\Model;

class Product extends Model
{
    protected $DBGroup          = 'default';
    protected $table            = 'products';
    protected $primaryKey       = 'id';
    protected $useAutoIncrement = true;
    protected $insertID         = 0;
    protected $returnType       = 'array';
    protected $useSoftDeletes   = false;
    protected $protectFields    = true;
    protected $allowedFields    = [];

    // Dates
    protected $useTimestamps = false;
    protected $dateFormat    = 'datetime';
    protected $createdField  = 'created_at';
    protected $updatedField  = 'updated_at';
    protected $deletedField  = 'deleted_at';

    // Validation
    protected $validationRules      = [];
    protected $validationMessages   = [];
    protected $skipValidation       = false;
    protected $cleanValidationRules = true;

    // Callbacks
    protected $allowCallbacks = true;
    protected $beforeInsert   = [];
    protected $afterInsert    = [];
    protected $beforeUpdate   = [];
    protected $afterUpdate    = [];
    protected $beforeFind     = [];
    protected $afterFind      = [];
    protected $beforeDelete   = [];
    protected $afterDelete    = [];
}

しかし、全てのプロパティがオーバーライドされており長いです。

モデルのテンプレートのカスタマイズ

実は、ジェネレータのテンプレートは簡単にカスタマイズできます。

モデルのテンプレートは、 vendor/codeigniter4/codeigniter4/system/Commands/Generators/Views/model.tpl.php にあります。これを app/Commands/Generators/Views/フォルダを作成し、そこにコピーします。

コピーした app/Commands/Generators/Views/model.tpl.php を好きなように変更します。

次に、app/Config/Generators.php にジェネレータの設定クラスがあるので変更します。

--- a/app/Config/Generators.php
+++ b/app/Config/Generators.php
@@ -32,7 +32,7 @@ class Generators extends BaseConfig
         'make:entity'       => 'CodeIgniter\Commands\Generators\Views\entity.tpl.php',
         'make:filter'       => 'CodeIgniter\Commands\Generators\Views\filter.tpl.php',
         'make:migration'    => 'CodeIgniter\Commands\Generators\Views\migration.tpl.php',
-        'make:model'        => 'CodeIgniter\Commands\Generators\Views\model.tpl.php',
+        'make:model'        => 'App\Commands\Generators\Views\model.tpl.php',
         'make:seeder'       => 'CodeIgniter\Commands\Generators\Views\seeder.tpl.php',
         'make:validation'   => 'CodeIgniter\Commands\Generators\Views\validation.tpl.php',
         'session:migration' => 'CodeIgniter\Commands\Generators\Views\migration.tpl.php',

これでOKです。

再度、モデルを生成してみましょう。

$ php spark make:model product --force

今度は以下が作成されました。

<?php

namespace App\Models;

use CodeIgniter\Model;

class Product extends Model
{
    protected $table            = 'products';
    protected $primaryKey       = 'id';
    protected $useAutoIncrement = true;
    protected $returnType       = 'array';
    protected $useSoftDeletes   = false;
    protected $allowedFields    = [];

    // Dates
    protected $useTimestamps = false;
    protected $dateFormat    = 'datetime';
    protected $createdField  = 'created_at';
    protected $updatedField  = 'updated_at';
    protected $deletedField  = 'deleted_at';
}

まとめ

  • CodeIgniter4にはアプリのファイルを作成するCLIジェネレータが付属しています。
  • 生成されるファイルのテンプレートは簡単にカスタマイズできます。

この記事は CodeIgniter Advent Calendar 2022 - Qiita の10日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。

関連

参考

Date: 2022/12/10

Tags: codeigniter, codeigniter4