codeage/entitygenerator

使用模型-实体管理层架构,美化您的源代码。

安装: 36

依赖项: 0

建议者: 0

安全性: 0

星级: 3

关注者: 4

分支: 0

开放问题: 0

类型:symfony-bundle

1.2.1 2015-12-23 08:41 UTC

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 获取所有类型
  • 枚举类型生成器