gonzo / bakery
Doctrine ORM 到 Magento 2 映射器
该包的官方仓库似乎已消失,因此该包已被冻结。
Requires
- doctrine/orm: *
- gonzo/bakery-core: ^0.0
- symfony/config: ^3.0 || ^4.0
This package is auto-updated.
Last update: 2019-10-16 23:14:34 UTC
README
Bakery 是一个用于 Magento 2 的脚手架工具。该工具将基于您提供的 Doctrine 实体生成一个新的 Magento 模块。新创建的 Magento 模块将包含执行 Magento 后端基本 CRUD 操作所需的一切。
此代码目前正在开发中,这意味着它随时可能出错 ¯\_(ツ)_/¯
安装
- 使用
composer require gonzo/bakery --dev
安装 Bakery 模块 - 使用
php bin/magento module:enable Gonzo_Bakery
启用模块 - 编译 Magento 的 DI 容器
php bin/magento setup:di:compile
- 设置模块
php bin/magento bakery:init
,该命令在 Magento 根目录中创建一个Entities
目录,并将注册一些全局信息。
创建 Doctrine 实体
- 在
Entities
目录中创建一个 Doctrine 实体类,并为其提供相同的命名空间,例如:namespace Entities;
- 添加 Doctrine 注释的使用语句:
use Doctrine\ORM\Mapping as ORM;
- 根据您的规范组合实体类
添加 Bakery 特定的注释(可选)
Doctrine 注释仅描述数据库表将如何看起来,以及在某种程度上如何填充表的单个表单字段。例如:Doctrine 注释 @ORM\Column(type="boolean")
将创建一个数据类型为 TINYINT(1)
的列,并为相关表单创建一个 复选框 表单组件。
然而,在某些情况下,仅使用 Doctrine 注释无法正确描述列的用途。例如,Doctrine 注释 @ORM\Column(type="string", length=255)
将创建一个数据类型为 VARCHAR(255)
的列,该列可以存储从简单的标题到上传文件的文件名,甚至是颜色的十六进制值。在这种情况下,可以添加 Bakery 注释来进一步指定属性的用途。
避免使用任何 Bakery 注释将导致 默认 表单元素。因此,一个简单的 @ORM\Column(type="string", length=255)
Doctrine 注释将导致一个 输入 表单元素。
Bakery 注释添加的方式与 Doctrine 注释类似,要么描述表单元素的外观,要么描述网格列的外观。显然,实体属性可以同时注释为表单元素注释和列元素注释。
向实体类添加使用语句
要启用 bakery 注释,请向实体类添加以下使用语句:use Gonzo\Bakery\Annotation as Bakery;
向实体类添加 Bakery 注释
简单地将 Bakery 注释添加到属性的 DocBlock 中。例如,我们将创建一个用于记录我们的音乐收藏的 Album 实体。我们只对专辑的标题和封面艺术感兴趣,因此这个实体可能看起来像这样
<?php
namespace Entities;
use Doctrine\ORM\Mapping as ORM;
use Gonzo\Bakery\Annotation as Bakery;
/**
* @ORM\Entity()
*/
class Album
{
/**
* @ORM\Column(name="album_id", length=8, type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Id()
*/
protected $albumId;
/**
* @ORM\Column(name="title", type="string")
*/
protected $title;
/**
* @ORM\Column(name="cover", type="string", length=255, nullable=true)
* @Bakery\FileUploader(fileTypes={"jpg", "jpeg", "gif", "png"}, name="cover")
*/
protected $cover;
}
注意,添加了FileUploader注解来指示应使用FileUploader组件来管理我们专辑表的封面艺术。该注解描述了允许此组件使用的文件扩展名数组,并且该注解名为cover
。
构建新模块
当你对实体配置满意时,只需使用php bin/magento bakery:scaffold
创建一个新模块。
此命令会自动将新模块写入<magento_root>/var/tmp/bakery_output
,以便你进行检查。
一切顺利时,运行php bin/magento bakery:scaffold -w
将其写入app/code
目录或手动复制。请注意,每次重新运行php bin/magento bakery:scaffold -w
时,你已对生成的代码所做的任何更改都将被覆盖。你有责任将任何更改提交到版本控制系统。通常,在最后调整实体后,再次运行scaffold命令,然后进行任何更改是一个好主意。
生成的代码中包含一个Setup/InstallSchema.php
文件,该文件将保存所有的数据库迁移。
命令选项
选项 | 缩写 | 描述 | 默认值 |
---|---|---|---|
--vendor | -d | 期望的供应商名称 | 无 |
--module | -m | 期望的模块名称 | 无 |
--entities | -e | 实体目录的路径 | /Entities |
--base-dir | -b | 生成模块将被放置的目录的绝对路径 | /var/tmp/bakery-output |
启用新模块
需要通过运行php bin/magento module:enable YourVendor_YourModule
来启用新模块
由于这是一个像其他模块一样的模块,因此还需要运行以下命令来通知Magento新代码并运行迁移
- php bin/magento setup:upgrade
- php bin/magento setup:di:compile
- php bin/magento cache:flush
常见问题解答
这个工具是做什么的?
它帮助你在自定义表中创建表单和网格。它读取你提供的实体配置,并在app/code
中创建一个Magento模块,作为你构建的起点。通过设置所有基本的样板代码用于CRUD操作,你可以节省时间并跳过编写所有这些重复且容易出错的代码。
这个工具不能做什么?
- Bakery不会在Magento 2中实现Doctrine。
- Bakery不会以任何方式在Magento 2中实现Active Record模式。
- Bakery不会考虑任何具有InheritanceType和父类的实体
- Bakery不会创建UpdateSchema或UpdateData类
这个工具是为谁编写的?
这个工具是为以下Magento 2开发者编写的
- 熟悉Doctrine
- 需要创建自定义模块以某种方式扩展Magento 2,但苦于从头开始创建网格和表单所需的工作量。
- 对花费太多时间调试表单或网格感到厌倦,因为ui-component xml配置有误,没有显示有用的错误。