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 资源扩展。选择是controller
和presenter
。默认为controller
。--namespace
: 设置根命名空间。默认为APP_NAMESPACE
的值。--suffix
: 将组件后缀追加到生成的类名。--force
: 设置此标志以覆盖目标上的现有文件。
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
: 设置返回类型,可以是array
、object
或entity
。默认为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
将创建以下文件
app/Controllers/User.php
app/Models/User.php
app/Database/Migrations/<some date here>_User.php 和
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',
];
}