jeandormehl / jhd-base
Jhd 模块之间的通用功能。
此包尚未发布版本,信息有限。
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 一起使用的配置。它查找、加载和配置您的 Annotaion、XML 和 YAML 映射文件,并将它们加载到 Doctrine 2 中。它还猜测您使用的对象管理器的类型,并将相应地加载元数据信息。它提供以下键
object_manager- 应将模型加载到其中的 Doctrine 2 对象管理器的名称/别名。常见的是doctrine.entitymanager.orm_default和doctrine.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。