CLI 生成器

CodeIgniter4 现在配备了生成器,可以轻松创建库存控制器、模型、实体等。您也可以用一个命令来搭建一整套文件。

介绍

所有内置生成器在使用 php spark list 列出时都位于 Generators 组下。要查看特定生成器的完整描述和使用信息,请使用以下命令

php spark help <generator_command>

其中 <generator_command> 将被替换为要检查的命令。

注意

您需要将生成的代码放在子文件夹中吗?例如,如果您想创建一个控制器类,该类位于主 Controllers 文件夹的 Admin 子文件夹中,您只需要在类名前面加上子文件夹,如下所示:php spark make:controller admin/login。此命令将在 Controllers/Admin 子文件夹中创建 Login 控制器,命名空间为 App\Controllers\Admin

注意

正在处理模块?代码生成将根命名空间设置为默认的 APP_NAMESPACE。如果您需要将生成的代码放在模块命名空间中的其他位置,请确保在命令中设置 --namespace 选项,例如:php spark make:model blog --namespace Acme\\Blog

警告

在设置 --namespace 选项时,请确保提供的命名空间是您在 Config\Autoload 中的 $psr4 数组中定义的有效命名空间,或在您的 Composer 自动加载文件中定义的有效命名空间。否则,代码生成将被中断。

重要

从 v4.0.5 版本开始,使用 migrate:create 创建迁移文件已弃用。它将在未来的版本中被移除。请使用 make:migration 作为替代。此外,请使用 make:migration --session 来代替已弃用的 session:migration

内置生成器

CodeIgniter4 默认情况下提供以下生成器。

make:cell

4.3.0 版本新增。

创建一个新的 Cell 文件及其视图。

用法:

make:cell <name> [options]

参数:

  • name: Cell 类的名称。它应该使用 PascalCase 命名。[必填]

选项:

  • --namespace: 设置根命名空间。默认为 APP_NAMESPACE 的值。

  • --force: 设置此标志以覆盖目标上的现有文件。

make:command

创建一个新的 Spark 命令。

用法:

make:command <name> [options]

参数:

  • name: 命令类的名称。[必填]

选项:

  • --command: 在 Spark 中运行的命令名称。默认为 command:name

  • --group: 命令的组/命名空间。对于基本命令,默认为 App,对于生成器命令,默认为 Generators

  • --type: 命令的类型,可以是 basic 命令或 generator 命令。默认为 basic

  • --namespace: 设置根命名空间。默认为 APP_NAMESPACE 的值。

  • --suffix: 将组件后缀追加到生成的类名。

  • --force: 设置此标志以覆盖目标上的现有文件。

make:config

创建一个新的配置文件。

用法:

make:config <name> [options]

参数:

  • name: 配置类的名称。 **[必填]**

选项:

  • --namespace: 设置根命名空间。默认为 APP_NAMESPACE 的值。

  • --suffix: 将组件后缀追加到生成的类名。

  • --force: 设置此标志以覆盖目标上的现有文件。

make:controller

创建一个新的控制器文件。

用法:

make:controller <name> [options]

参数:

  • name: 控制器类的名称。 **[必填]**

选项:

  • --bare: 从 CodeIgniter\Controller 而不是 BaseController 扩展。

  • --restful: 从 RESTful 资源扩展。选择是 controllerpresenter。默认为 controller

  • --namespace: 设置根命名空间。默认为 APP_NAMESPACE 的值。

  • --suffix: 将组件后缀追加到生成的类名。

  • --force: 设置此标志以覆盖目标上的现有文件。

注意

如果您使用 --suffix,生成的控制器名称将类似于 ProductController。当使用 自动路由 时,这违反了控制器命名约定(控制器类名必须以大写字母开头,并且只有第一个字符可以是大写)。因此,当您使用 已定义的路由 时,可以使用 --suffix

make:entity

创建一个新的实体文件。

用法:

make:entity <name> [options]

参数:

  • name: 实体类的名称。 **[必填]**

选项:

  • --namespace: 设置根命名空间。默认为 APP_NAMESPACE 的值。

  • --suffix: 将组件后缀追加到生成的类名。

  • --force: 设置此标志以覆盖目标上的现有文件。

make:filter

创建新的过滤器文件。

用法:

make:filter <name> [options]

参数:

  • name: 过滤器类的名称。[必填]

选项:

  • --namespace: 设置根命名空间。默认为 APP_NAMESPACE 的值。

  • --suffix: 将组件后缀追加到生成的类名。

  • --force: 设置此标志以覆盖目标上的现有文件。

make:model

创建新的模型文件。

用法:

make:model <name> [options]

参数:

  • name: 模型类的名称。[必填]

选项:

  • --dbgroup: 要使用的数据库组。默认为 default

  • --return: 设置返回类型,可以是 arrayobjectentity。默认为 array

  • --table: 提供不同的表名。默认为类名复数形式。

  • --namespace: 设置根命名空间。默认为 APP_NAMESPACE 的值。

  • --suffix: 将组件后缀追加到生成的类名。

  • --force: 设置此标志以覆盖目标上的现有文件。

make:seeder

创建新的播种机文件。

用法:

make:seeder <name> [options]

参数:

  • name: 播种机类的名称。[必填]

选项:

  • --namespace: 设置根命名空间。默认为 APP_NAMESPACE 的值。

  • --suffix: 将组件后缀追加到生成的类名。

  • --force: 设置此标志以覆盖目标上的现有文件。

make:migration

创建新的迁移文件。

用法:

make:migration <name> [options]

参数:

  • name: 迁移类的名称。[必填]

选项:

  • --session: 生成数据库会话的迁移文件。

  • --table: 设置用于数据库会话的表名。默认值为 ci_sessions

  • --dbgroup: 设置数据库会话的数据库组。默认值为 default 组。

  • --namespace: 设置根命名空间。默认为 APP_NAMESPACE 的值。

  • --suffix: 将组件后缀追加到生成的类名。

  • --force: 设置此标志以覆盖目标上的现有文件。

make:validation

创建一个新的验证文件。

用法:

make:validation <name> [options]

参数:

  • name: 验证类的名称。[必填]

选项:

  • --namespace: 设置根命名空间。默认为 APP_NAMESPACE 的值。

  • --suffix: 将组件后缀追加到生成的类名。

  • --force: 设置此标志以覆盖目标上的现有文件。

搭建一套完整的股票代码

有时在开发阶段,我们会按组创建功能,例如创建管理员组。该组将包含自己的控制器、模型、迁移文件,甚至实体。您可能很想在终端中逐个键入每个生成器命令,并希望有一个单一的生成器命令来统治它们。

别担心!CodeIgniter4 还附带一个专门的 make:scaffold 命令,它基本上是控制器、模型、实体、迁移和种子生成器命令的包装器。您只需要使用该类名来命名所有生成的类。此外,每个生成器命令支持的单独选项都会被脚手架命令识别。

在您的终端中运行此命令

php spark make:scaffold user

将创建以下文件

  1. app/Controllers/User.php

  2. app/Models/User.php

  3. app/Database/Migrations/<some date here>_User.php

  4. app/Database/Seeds/User.php

要将 Entity 类包含在脚手架文件中,只需在命令中包含 --return entity,它将被传递给模型生成器。

GeneratorTrait

所有生成器命令都必须使用 GeneratorTrait 来充分利用其在代码生成中使用的方法。

声明自定义生成器命令模板的位置

生成器模板的默认查找顺序是 (1) 在 app/Config/Generators.php 文件中定义的模板,以及 (2) 如果未找到,则在 CodeIgniter\Commands\Generators\Views 命名空间中找到的模板。

要声明自定义生成器命令的模板位置,您需要将其添加到 app/Config/Generators.php 文件中。例如,如果您有一个命令 make:awesome-command 并且您的生成器模板位于您的 app 目录 app/Commands/Generators/Views/awesomecommand.tpl.php 中,您将像这样更新配置文件

<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;

class Generators extends BaseConfig
{
    public array $views = [
        // ..
        'make:awesome-command' => 'App\Commands\Generators\Views\awesomecommand.tpl.php',
    ];
}