在 CodeIgniter 4 中,通常使用 php spark make:model 命令來快速生成模型。默認情況下,這些模型繼承自內建的 CodeIgniter\Model。本教程將指導你如何創建一個自定義的 spark 命令,以便生成的模型繼承自你自己的 BaseModel

步驟 1: 創建自定義命令

app/Commands 目錄下,創建一個新的 PHP 文件,命名為 MakeBaseModelCommand.php,並添加以下代碼:

<?php namespace App\Commands;

use CodeIgniter\CLI\BaseCommand;
use CodeIgniter\CLI\CLI;

class MakeBaseModelCommand extends BaseCommand
{
    protected $group       = 'Generators';
    protected $name        = 'make:basemodel';
    protected $description = 'Creates a new model file extending from BaseModel.';

    public function run(array $params)
    {
        // 確保提供了模型名稱
        $name = array_shift($params);
        if (empty($name))
        {
            CLI::error('You must provide a model name.');
            return;
        }

        $ns = CLI::getOption('namespace') ?? APP_NAMESPACE;
        $homePath = APPPATH;

        // 定義文件路徑和模板數據
        $path = $homePath . 'Models/' . $name . '.php';
        $template = <<<EOD
<?php namespace $ns\Models;

use App\Models\BaseModel;

class {name} extends BaseModel
{
    protected \$table      = ''; // 定義數據表名稱
    protected \$primaryKey = ''; // 定義主鍵

    // 添加您的模型屬性和方法
}

EOD;

        $template = str_replace('{name}', $name, $template);

        // 確保文件不存在
        if (file_exists($path))
        {
            CLI::error("File already exists at: {$path}");
            return;
        }

        // 寫入文件
        helper('filesystem');
        if (!write_file($path, $template))
        {
            CLI::error('Error writing model file.');
            return;
        }

        CLI::write('File created: ' . CLI::color($path, 'green'));
    }
}

這個命令會根據提供的模型名稱,在 app/Models 目錄下生成一個新的模型文件,該文件繼承自 BaseModel

步驟 2: 註冊自定義命令

如果你的應用中不存在 app/Config/Commands.php 文件,請創建該文件。然後添加以下代碼來註冊你的自定義命令:

<?php namespace Config;

use CodeIgniter\Config\BaseConfig;

class Commands extends BaseConfig
{
    public $commands = [
        'App\Commands\MakeBaseModelCommand' => 'make:basemodel',
    ];
}

步驟 3: 使用自定義 Spark 命令

現在你可以使用新的 spark 命令來生成模型了。打開終端或命令提示符,執行以下命令:

php spark make:basemodel ModSaManager

這會在 app/Models 目錄下生成一個名為 ModSaManager.php 的文件,並且這個文件中的模型類會繼承自 BaseModel

總結

通過創建自定義的 spark 命令,你可以更加靈活地控制模型的生成,尤其是在需要模型繼承自特定基礎類的情況下。這種方法為 CodeIgniter 4 應用提供了更大的定制性和靈活性。

最後修改日期: 2024 年 1 月 23 日

作者