webforge / doctrine-compiler
从简单的JSON文件生成doctrine实体元数据,包括实体的PHP代码
Requires
- beberlei/assert: 1.6.*@stable
- webforge/doctrine: 1.2.*
- webforge/serializer: 1.0.*
- webforge/webforge: ~1.11.0
Requires (Dev)
- mikey179/vfsstream: 1.3.*@dev
- mockery/mockery: ~0.9
- webforge/testplate: ~1.6.0
README
从简单的JSON文件生成doctrine实体元数据,包括实体的PHP代码
使用说明
一个非常基础的模型(含一个实体)可能如下所示
{ "namespace": "ACME\\Blog\\Entities", "entities": [ { "name": "User", "properties": { "id": { "type": "DefaultId" }, "email": { "type": "String" } } } ] }
编译器将为您创建此实体
<?php namespace ACME\Blog\Entities; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="users") */ class User { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue */ protected $id; /** * @ORM\Column(length=200) */ protected $email; public function __construct($email) { $this->email = $email; } /** * @return string */ public function getEmail() { return $this->email; } /** * @param string Email * @chainable */ public function setEmail($email) { $this->email = $email; return $this; } }
您可以选择使用此代码并将其复制粘贴到您的(doctrine)项目中。另一种选择是将JSON模型放入您的项目中,并将编译器作为开发依赖项包含。如果有人更改了模型,实体可以被重新编译。您只需跨越生成差距即可
CompiledUser.php
<?php namespace ACME\Blog\Entities; use Doctrine\ORM\Mapping as ORM; abstract class CompiledUser { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue */ protected $id; /** * @ORM\Column(length=200) */ protected $email; public function __construct($email) { $this->email = $email; } /** * @return string */ public function getEmail() { return $this->email; } /** * @param string Email * @chainable */ public function setEmail($email) { $this->email = $email; return $this; } }
User.php
<?php namespace ACME\Blog\Entities; /** * @ORM\Entity * @ORM\Table(name="users") */ use Doctrine\ORM\Mapping as ORM; class User extends CompiledUser { protected $somethingUserDefined; public function __construct($email, $somethingUserDefined) { parent::_construct($email); $this->somethingUserDefined = $somethingUserDefined; } }
这样,您的开发人员应该永远不要接触编译后的** - 实体,而总是修改扩展类。这样,您可以轻松地添加新属性到实体,或者更改它们之间的关系。
安装
使用doctrine编译器的最佳方式是将它作为开发工具安装到您的机器上。
composer global require webforge/doctrine-compiler
我建议将全局composer bin目录(~/.composer/vendor/bin
或 %APPDATA%\composer\vendor\bin
)添加到您的PATH中。
运行
您可以使用通过composer安装的二进制文件来编译实体。您必须提供JSON模型文件的路径和PSR-1目标目录。
~/.composer/vendor/bin/webforge-doctrine-compiler orm:compile etc/doctrine/model.json path/to/my/package/src/php
这将在src/php中的PSR-1命名目录中创建实体
已知问题
- OneToMany,自引用关联尚不支持
- 许多情况下,主键默认id的名称硬编码为'id'(鼓励您使用这样的id)
LICENSE
MIT许可证(MIT)
版权所有 (c) 2015 webforge
在此特此授予任何获得此软件及其相关文档文件(“软件”)副本的任何人,免费使用软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许向软件提供者提供软件的人这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、特定目的适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是基于合同、侵权或其他方式,是否因软件或其使用或其它交易而产生。