codeage / entitygenerator
使用模型-实体管理层架构,美化您的源代码。
This package is not auto-updated.
Last update: 2024-09-28 17:54:45 UTC
README
关于
我编写此包是为了简化在 Symfony2 项目中创建新实体时的生活。我使用的是 "3层架构",将ORM逻辑分割成几个文件。
- 模型 - 只包含字段数据及其getter和setter(以及添加或删除,如果需要的话 :D )
- 实体 - 主要文件,用于创建实体对象,该文件存储内部实体逻辑。例如,当您想以某种方式修改数据时。
- 管理器 - 以及管理器文件,应将其视为给定实体的 "仓库",并且您应该在这里放置所有与它相关的QueryBuilder。
目前,此包只支持在 XML 格式中进行映射。我认为将所有这些层分开是提高代码可读性的好习惯。
更重要的是,每个管理器都拥有自己的Service,因此您可以轻松地调用它。更多关于它的信息请参阅 用法 部分。
安装
简单得就像馅饼一样 :) 在您的 composer.json 文件中的 require 部分添加以下内容
"codeage/entitygenerator": "1.*"
然后更新您的 vendors!
现在,您唯一要做的就是启用 AppKernel 文件中的此包,要这样做,请添加
new CodeAge\EntityGeneratorBundle\EntityGeneratorBundle(),
从版本 1.1.0 开始,在 AbstractEntity 中添加了 traits,以便在使用 FOSUserBundle 等无法扩展 AbstractEntity 的情况下使用方法(我将来会添加的 :))。例如,如果您正在使用 FOSUserBundle 并且需要扩展他们的用户实体。
用法
要创建新实体,请使用以下命令
$ php app/console ca:entity:generate
#for Symfony3
$ php bin/console ca:entity:generate
然后您将被要求输入新实体的名称,但您需要以创建它的包名开头(命令应该自动完成包名 :))。例如。
UserBundle:User
其中 UserBunlde 是包名,而 User 是您的新实体名称。
从现在开始,您将被要求提供字段名称、其类型(默认为字符串)及其参数。例如,字符串可以配置为长度和可空值。
还有一个 "实体" 类型,用于创建关系字段。(注意:目前只支持单向关系)
当您添加所有需要的字段后,您将被要求确认生成实体,然后将在您的包目录中创建几个文件(如 about 部分中所述 :))
在您的控制器中,您现在可以这样调用您的管理器
function indexAction($id){ $userManager = $this->get(UserManager::SERVICE); /* @var $userManager UserManager */ $user = $userManager->find($id); /* @var $user User */ }
就是这样!正如我之前所说,管理器就像仓库一样使用,因此您可以在其中创建一些有用的查询,而不是像示例中那样使用“find”,但您也可以使用所有类似仓库的方法,例如。
- findBy
- findAll
- findOneBy
那么插入、更新和删除呢?
插入
$userManager = $this->get(UserManager::SERVICE); /* @var $userManager UserManager */ $user = new User(); $user->setName('SomeNameOFUser'); $userManager->persist($user) ->flush();
更新
$userManager = $this->get(UserManager::SERVICE); /* @var $userManager UserManager */ $user = $userManager->find($id); /* @var $user User */ //Assume that there is a user with this id :) $user->setName('NewNameForUser'); $userManager->update($user); //Done! But you can pass false as second parameter to disable force-flush :)
删除/移除
$userManager = $this->get(UserManager::SERVICE); /* @var $userManager UserManager */ $user = $userManager->find($id); /* @var $user User */ $userManager->remove($user); //Done! But you still can disable force-flush
计划中的更改
-
使用 traits 而不是简单的继承,以简化 FOSUserBundle 的实现 :) -
打印所有可能的字段类型列表 -
当询问用户是否确认生成时,打印所有实体配置 - 在添加字段后修改字段的能力
- 从 DBAL 获取所有类型
- 枚举类型生成器