jeandormehl/jhd-base

此包已被废弃,不再维护。未建议替代包。

Jhd 模块之间的通用功能。

维护者

详细信息

github.com/jeandormehl/jhd-base

此包尚未发布版本,信息有限。


README

Jhd 模块之间的通用功能。

安装

此模块的安装使用 composer。有关 composer 文档,请参阅 getcomposer.org

$ php composer.phar require jeandormehl/jhd-base:1.0.x-dev

此模块需要

提供

  • 抽象引导监听器
  • 抽象映射订阅者
  • 抽象元数据选项
  • 各种抽象模型/特性和接口
  • 标准库,用于各种文件路径函数、文件缓存、zip/gzip 解压缩和数据传输使用 Guzzle

抽象引导监听器

此类提供自定义事件监听器的抽象。它将您的自定义事件监听器附加到 Zend Framework 的 onBootstrap 事件,并使用 MetadataLoader 类加载 Doctrine 2 的元数据信息。需要最小配置。有关详细信息,请参阅下面的 AbstractMetadataOptions 类。要将您的自定义事件监听器附加,请按如下方式将其添加到 Module.php 中

<?php
...
class Module
{
    ...
    public function init()
    {
        $priority = 250;

        $aggregate = new MyCustomBootsrapListener();
        $aggregate->attach($manager->getEventManager(), $priority);
    }
    ...
}

抽象映射订阅者

此类负责读取模块配置中提供的 object_mapping 键传递的信息。它允许动态覆盖 Doctrine 2 实体和模型的 doctrine 字段和关联映射。有关详细信息,请参阅下面的 AbstractMetadataOptions 类。要使用自定义映射订阅者,创建一个新类并扩展 Jhd\Base\EventListener\AbstractMappingSubscriber。然后简单地将您的新自定义映射订阅者添加到模块配置中的 subscribers 键下。

<?php

use MyCustomMappingSubscriber;

return [
    ...
    'subscribers' => [
        MyCustomMappingSubscriber::class
    ],
    ...
];

抽象元数据选项

此类提供与 Abstract Bootstrap Listener 和 Abstract Mapping Subscriber 一起使用的配置。它查找、加载和配置您的 AnnotaionXMLYAML 映射文件,并将它们加载到 Doctrine 2 中。它还猜测您使用的对象管理器的类型,并将相应地加载元数据信息。它提供以下键

  • object_manager - 应将模型加载到其中的 Doctrine 2 对象管理器的名称/别名。常见的是 doctrine.entitymanager.orm_defaultdoctrine.entitymanager.odm_default
  • enable_default_models - 此键通知模块是否应使用模块附带的自定义模型。如果设置为 false,则需要创建自定义模型并设置命名空间/路径。
  • models_namespace - 如果您不使用默认模型,则应提供模型的命名空间。如果使用默认模型,则留空。
  • models_path - 您自定义 Doctrine 2 映射文件的路径。使用 Jhd\Base\Stdlib\Path 类简化路径解析。如果使用默认模型,则留空。
  • subscribers - 自定义 doctrine 订阅者数组。
  • object_mapping - 用于定义默认映射配置的覆盖。包含加载到元数据中的模型数组,并覆盖默认配置。请参阅示例。在这里,我们动态映射一个多对一关联。

示例

<?php

use Jhd\Base\Stdlib\Path;
use My\Custom\Models\Model;
use My\Custom\Models\TargetEntity;
use MyCustomMappingSubscriber;

return [
    'module_name' => [
        'object_manager' => 'doctrine.entitymanager.orm_default',
        'enable_default_models' => false,
        'models_namespace' => 'My\Custom\Models',
        'models_path' => Path::normalize('./dir/to/my/models'),
        'subscribers' => [
            MyCustomMappingSubscriber::class
        ],
        'object_mapping' => [
            /** ONE-TO-MANY, Unidirectional with join table. */
            [
                'model'               => Model::class,
                'associationMappings' => [
                    'field' => [
                        'fieldName'    => 'association',
                        'targetEntity' => TargetEntity::class,
                        'type'         => MyCustomMappingSubscriber::MANY_TO_MANY,
                        'joinTable'    => [
                            'name'        => 'table_name',
                            'joinColumns' => [
                                [
                                    'name'                 => 'modelEntity_id',
                                    'referencedColumnName' => 'id',
                                ],
                            ],
                            'inverseJoinColumns' => [
                                [
                                    'name'                 => 'targetEntity_id',
                                    'referencedColumnName' => 'id',
                                    'unique'               => true,
                                ],
                            ],
                        ],
                        'cascade' => [
                            'persist',
                            'remove',
                        ],
                        'orphanRemoval' => true,
                    ],
                ],
            ],
        ],
    ],
];

各种抽象模型/特性接口

请参阅此模块的 src 目录下的 Models 目录以获取更多详细信息。

请联系我:jdormehl@gmail.com