t4web / domain-module
ZF2 实现域的模块。
1.5.0
2019-05-13 12:46 UTC
Requires
- php: >=5.5.0
- t4web/domain: ~1.2.0
- t4web/infrastructure: ~2.0.1
- zendframework/zend-modulemanager: >=2.6
- zendframework/zend-mvc: >=2.6
- zendframework/zend-servicemanager: >=2.6
Requires (Dev)
- phpunit/phpunit: ~4.5
- squizlabs/php_codesniffer: ^2.3
README
ZF2 实现域和基础设施的模块。提供动态配置的域层。
主要设置
通过克隆项目
- 将此项目克隆到您的
./vendor/
目录。
使用 composer
- 在您的 composer.json 中添加此项目
"require": { "t4web/domain-module": "~1.3.0" }
- 现在运行以下命令让 composer 下载 DomainModule
$ php composer.phar update
安装后
- 在您的
application.config.php
文件中启用它。
<?php return array( 'modules' => array( // ... 'T4web\DomainModule', ), // ... );
快速开始
描述实体
class Task extends \T4webDomain\Entity { protected $name; protected $assigneeId; protected $status; protected $type; /** * @var Users\User\User */ protected $assignee; public function __construct(array $data, Users\User\User $assignee = null) { parent::__construct($data); $this->assignee = $assignee; } /** * @return Users\User\User */ public function getAssignee() { return $this->assignee; } }
在您的 module.config.php
中描述 entity_map 配置
return [ // ... 'entity_map' => [ 'Task' => [ // table name 'table' => 'tasks', // optional, only if you have use short service names 'entityClass' => 'Tasks\Task\Task', // optional, only if you have use short service names 'collectionClass' => 'Tasks\Task\TaskCollection', // optional, by default 'id' 'primaryKey' => 'id', // map entity field with table field 'columnsAsAttributesMap' => [ 'id' => 'id', 'name' => 'name', 'assigneeId' => 'assignee_id', 'status' => 'status', 'type' => 'type', ], // optional, aliases for criteria - for pretty query args 'criteriaMap' => [ 'id' => 'id_equalTo' ], // optional, relations for filtering and fetching aggregate entity 'relations' => [ 'User' => ['tasks.assignee_id', 'users.id'] ], ], ], ];
您可以从 ServiceManager 获取域层
// in your controller $creator = $serviceLocator->get('Task\Service\Creator'); $task = $creator->create(['name' => 'buy milk', 'type' => 2]); if (!$task) { return ['errors' => $creator->getMessages()]; } $repository = $serviceLocator->get('Task\Infrastructure\Repository'); /** @var Tasks\Task\Task $task */ $task = $repository->findById(123); $repository = $serviceLocator->get('Task\Infrastructure\AggregateRepository'); $task = $repository->findWith('User')->findById(123); /** @var Users\User\User $assignee */ $assignee = $task->getAssignee();
组件
MODULE-NAME\ENTITY-NAME\Infrastructure\Repository
MODULE-NAME\ENTITY-NAME\Service\Creator
MODULE-NAME\ENTITY-NAME\Service\Deleter
MODULE-NAME\ENTITY-NAME\Service\Updater
MODULE-NAME\ENTITY-NAME\EntityFactory
服务类
MODULE-NAME\ENTITY-NAME\Infrastructure\Config
MODULE-NAME\ENTITY-NAME\Infrastructure\Mapper
MODULE-NAME\ENTITY-NAME\Infrastructure\QueryBuilder
我们建议使用简短的服务名称 - 不包含模块名称
ENTITY-NAME\Infrastructure\Repository
ENTITY-NAME\Service\Creator
ENTITY-NAME\Service\Deleter
ENTITY-NAME\Service\Updater
ENTITY-NAME\EntityFactory
服务类
ENTITY-NAME\Infrastructure\Config
ENTITY-NAME\Infrastructure\Mapper
ENTITY-NAME\Infrastructure\QueryBuilder
当您使用简短的服务名称时,需要提供 entityClass
配置参数。