mark-gerarts/automapper-plus-bundle
Composer 安装命令:
composer require mark-gerarts/automapper-plus-bundle
包简介
A Symfony bundle for AutoMapper+
关键字:
README 文档
README
A Symfony bundle for AutoMapper+. To see it in action, check out the demo app.
Table of Contents
Installation
The bundle is available on packagist:
$ composer require mark-gerarts/automapper-plus-bundle
Compatibility
This bundle supports Symfony 3.4 through 8.x.
Don't forget to register the bundle:
$bundles = [ new AutoMapperPlus\AutoMapperPlusBundle\AutoMapperPlusBundle(), // ... ];
Usage
The automapper is available as a service: automapper_plus.mapper (or just type hint
the AutoMapperPlus\AutoMapperInterface).
You can register mapping configurations by creating a class that implements the
AutoMapperConfiguratorInterface. This configurator class will have to define a
configure method, that gets passed the configuration object:
<?php namespace Demo; use AutoMapperPlus\AutoMapperPlusBundle\AutoMapperConfiguratorInterface; use AutoMapperPlus\Configuration\AutoMapperConfigInterface; use Demo\Model\Employee\Employee; use Demo\Model\Employee\EmployeeDto; class AutoMapperConfig implements AutoMapperConfiguratorInterface { public function configure(AutoMapperConfigInterface $config): void { $config->registerMapping(Employee::class, EmployeeDto::class) ->forMember('fullName', function (Employee $source) { return $source->getFirstName() . ' ' . $source->getLastName(); }); // And so on.. } }
If your configurator class is registered as a service and service autoconfiguration is enabled, the bundle will tag it automatically.
For example, with a typical Symfony services.yaml:
services: _defaults: autowire: true autoconfigure: true App\: resource: '../src/' exclude: - '../src/DependencyInjection/' - '../src/Entity/' - '../src/Kernel.php'
and a configurator class like:
<?php namespace App\Mapper; use AutoMapperPlus\AutoMapperPlusBundle\AutoMapperConfiguratorInterface; use AutoMapperPlus\Configuration\AutoMapperConfigInterface; class AutoMapperConfig implements AutoMapperConfiguratorInterface { public function configure(AutoMapperConfigInterface $config): void { // Register mappings... } }
the bundle will pick it up automatically.
If your configurator is not covered by service discovery, you can register it manually as a service. If autoconfiguration is enabled for that service, no manual tag is needed:
services: App\Mapper\AutoMapperConfig: autowire: true autoconfigure: true
If autoconfiguration is disabled, register the class as a service and tag it
with automapper_plus.configurator. You can optionally add a priority parameter
to the tag.
services: App\Mapper\AutoMapperConfig: tags: - { name: automapper_plus.configurator }
You can register all your mappings in a single configurator class, or spread it across multiple classes. The choice is yours!
Configuration
The options for the mapper can be configured. Create a config/packages/automapper_plus.yaml
file (or add to your config.yaml for older Symfony versions) with the following contents:
auto_mapper_plus: options: create_unregistered_mappings: true
These options correspond with the ones of the Options object.
Full reference (Not all options are supported at the moment, more coming soon!):
auto_mapper_plus: options: # These options are example values, and not necessarily the default # ones. If an option is not provided, the base library's default will # be used. create_unregistered_mappings: true skip_constructor: true use_substitution: true ignore_null_properties: false # Note that this should be the service name, and not necessarily the # FQCN. property_accessor: AutoMapperPlus\AutoMapperPlusBundle\PropertyAccessor\SymfonyPropertyAccessorBridge
Using the configuration is completely optional, you can just set the options directly
on the Options object in one of your configurators using $config->getOptions().
Symfony property accessors
The bundle contains a bridge for the Symfony PropertyAccessor. It provides 2 variants:
- The
SymfonyPropertyAccessorBridgeis basically only the functionality of Symfony's component, meaning you can NOT set private properties directly (which is a good thing if you want to be more strict). - The
DecoratedPropertyAccessoruses the Symfony property access, but falls back to the default in case of failure. This means private properties will be handled, even if they don't have a getter/setter.
Both options provide allow to use fromProperty with full property paths,
e.g. forMember('aProperty', Operation::fromProperty('some.nested[child]'));.
Note that other usages of property paths have not been tested and are not
guaranteed to work. It will be investigated in the 2.x release
(related issue).
Sample service definition:
services: AutoMapperPlus\AutoMapperPlusBundle\PropertyAccessor\SymfonyPropertyAccessorBridge: arguments: $propertyAccessor: '@property_accessor'
In your automapper_plus.yaml configuration:
auto_mapper_plus: options: property_accessor: 'AutoMapperPlus\AutoMapperPlusBundle\PropertyAccessor\SymfonyPropertyAccessorBridge'
Further reading
For more info regarding the automapper itself, check out the project page.
mark-gerarts/automapper-plus-bundle 适用场景与选型建议
mark-gerarts/automapper-plus-bundle 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2.01M 次下载、GitHub Stars 达 64, 最近一次更新时间为 2017 年 10 月 12 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「bundle」 「automapper」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 mark-gerarts/automapper-plus-bundle 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 mark-gerarts/automapper-plus-bundle 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 mark-gerarts/automapper-plus-bundle 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
An object to object mapper bundle for Symfony2
PHP port of the popular automapper.org library
Papper is PHP convention-based object to object mapper
2lenet/EasyAdminPlusBundle
The bundle for easy using json-rpc api on your project
Laravel wrapper for automapper-plus by Mark Gerarts
统计信息
- 总下载量: 2.01M
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 65
- 点击次数: 21
- 依赖项目数: 8
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2017-10-12