mark-gerarts/automapper-plus-bundle 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

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 SymfonyPropertyAccessorBridge is 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 DecoratedPropertyAccessor uses 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 我们能提供哪些服务?
定制开发 / 二次开发

基于 mark-gerarts/automapper-plus-bundle 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 2.01M
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 65
  • 点击次数: 21
  • 依赖项目数: 8
  • 推荐数: 0

GitHub 信息

  • Stars: 64
  • Watchers: 1
  • Forks: 12
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2017-10-12