jinn / laravel
Jinn for Laravel。模型、迁移和API生成器。
Requires
- php: >=7.4
- jinn/core: ^0.2
- laravel/framework: ^8.54|^9.0
- nette/php-generator: ^3.6
This package is auto-updated.
Last update: 2024-09-30 01:57:31 UTC
README
Jinn是一个代码生成器,通过从简单的YAML定义生成模型、迁移和API来加速您的工作。与其他生成器不同的是,Jinn允许您在不失去更新定义时更新生成代码的能力。
请阅读完整的文档jinncode.dev。
关键概念
当然,有大量的框架和库使用不同的方法实现了相同的目的。本节描述了使Jinn与众不同的关键设计决策。
代码生成
与许多API和管理面板框架不同,Jinn使用代码生成,因为它提供了以下好处:
- 仅生成所需的代码,即如果您不需要API中的
update
方法,则根本不会生成。 - 生成的代码不必非常通用,这使得它更加简单。
Symfony和Laravel框架也使用代码生成。然而,它们采用缓存方法,即在实际运行时生成代码。Jinn在构建时生成代码,这意味着没有首次运行性能缺点,并且可以轻松检查代码。
所有上述内容意味着:
- Jinn与其他方法相比没有性能缺点。
- 检查代码、了解其工作原理、扩展和自定义它都很容易。
基础类
Jinn生成的每个类(除迁移外)都被分为两个文件
- 在您的源文件夹下有一个空的类,它扩展了一个
- 位于单独文件夹中的基类,该文件夹包含所有逻辑
这个想法是从过去知名的PHP ORM Propel
中借用的。主类只生成一次且永不更新,因此您可以自由地使用它来定制生成的逻辑。同时,Jinn可以在定义更改时为您更新基类逻辑。
数据库
目前,Jinn仅支持SQL数据库。计划支持MongoDB。
Jinn旨在管理其数据库表和模型,即它无法与现有的模型和数据库表一起工作。它还期望不会对其数据库表进行更改;否则,它们可能会被覆盖。同时,同一数据库中可以同时存在Jinn管理的和非Jinn管理的表。
框架
Jinn的参考实现是为Laravel制作的,但它旨在允许为任何框架实现。欢迎贡献者。
在下面的指南中,特定于Laravel的部分将相应地标记。
安装
通过Composer设置
composer require jinn/jinn-laravel@dev-master
发布Jinn配置文件
php artisan vendor:publish --provider="Jinn\Laravel\JinnServiceProvider"
创建Jinn文件夹结构
默认结构
jinn
- def
- gen
可以通过config/jinn.php
配置替代结构。此外,本指南将使用默认配置。更改Jinn配置应导致后续步骤的相应更改。
配置自动加载
编辑composer.json
,找到自动加载部分,并添加以下行
"autoload": { "psr-4": { ... "JinnGenerated\\": "jinn/gen/" } }
然后让Composer更新自动加载文件
composer dump-autoload
入门指南
基本定义
将以下定义复制到jinn/def/entities.yaml
或创建自己的。
User: class: extends: Illuminate\Foundation\Auth\User properties: name: string email: { type: string, unique: true } password: string avatar_filename: { type: string, required: false } Post: properties: content: text author: { entity: User, relation: many-to-one } published_at: datetime comments: { entity: Comment, relation: one-to-many } Comment: properties: content: text author: { entity: User, relation: many-to-one } published_at: datetime
生成
要求Jinn生成文件
php artisan jinn
检查app
和jinn/gen
文件夹下生成的文件。
待办事项
- 模型
- 更多的字段类型?
- 不同类型的
id
- 允许创建必要的(非可空)多对一关系
- API
- 相关控制器
- 其他方法:关联/解除关联,其他?
- 规范
- 迁移
- MongoDB
- 管理面板
- 文件监视器
- Symfony 实现