webforge/doctrine-compiler

从简单的JSON文件生成doctrine实体元数据,包括实体的PHP代码

1.1.2 2017-11-14 23:05 UTC

This package is auto-updated.

Last update: 2024-09-04 09:17:55 UTC


README

Build Status
Coverage Status
Latest Stable Version

从简单的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

在此特此授予任何获得此软件及其相关文档文件(“软件”)副本的任何人,免费使用软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许向软件提供者提供软件的人这样做,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、特定目的适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是基于合同、侵权或其他方式,是否因软件或其使用或其它交易而产生。