kepka42 / laravel-mapper
此包已被弃用且不再维护。未建议替代包。
地图数据包
0.1.2
2019-01-28 03:30 UTC
Requires
- php: >=7.1
Requires (Dev)
- laravel/laravel: >=5.5
This package is auto-updated.
Last update: 2021-06-28 09:53:10 UTC
README
关于
laravel-mapper
包允许您非常简单地映射对象
安装
在您的 composer.json 中要求 kepka42/laravel-mapper
包并更新您的依赖项
composer require kepka42/laravel-mapper
您还需要使用命令发布配置
php artisan vendor:publish --provider="kepka42\LaravelMapper\MapperServiceProvider"
使用
要创建映射器,您可以使用命令
php artisan make:mapper NameOfMapper
此命令将在您的应用程序的 app
目录下的 Mapper
文件夹中创建映射器类
<?php class NameOfMapper extends AbstractMapper { protected $sourceType = ""; protected $hintType = "" /** * @param $object * @param array $params * @return mixed */ public function map($object, $params = []) { // TODO: Map here } }
$sourceType
是您想要映射的类型。
$hintType
是您想要映射到的类型。
map
函数是您将具有类型 $sourceType
的对象映射到具有类型 $hintType
的对象的函数实现。
您还需要在 config/mapper.php
中添加您的映射器
<?php return [ 'mappers' => [ NameOfMapper::class ] ];
这就完成了。您可以使用 Facade
<?php $result = Mapper::map($object, HintType::class);
或合约
<?php $result = $mapperContract->map($object, HintType::class);
示例
我有 DTO 类
<?php namespace App\Domain; /** * Class SearchInfo * @package App\Domain */ class SearchInfo { /** @var string */ private $name; /** @var string */ private $address; /** * SearchInfo constructor. * @param string $name * @param string $address */ public function __construct( string $name, string $address ) { $this->name = $name; $this->address = $address; } /** * @return string */ public function getName(): string { return $this->name; } /** * @param string $name */ public function setName(string $name): void { $this->name = $name; } /** * @return string */ public function getAddress(): string { return $this->address; } /** * @param string $address */ public function setAddress(string $address): void { $this->address = $address; } }
并且我想将 Request
映射到 SearchInfo
。
我需要创建映射器
php artisan make:mapper RequestToSearchInfoMapper
并编写映射函数
<?php namespace App\Mappers; use App\Domain\SearchInfo; use Illuminate\Http\Request; use kepka42\LaravelMapper\Mapper\AbstractMapper; /** * Class RequestToSearchInfoMapper * @package App\Mappers */ class RequestToSearchInfoMapper extends AbstractMapper { protected $sourceType = Request::class; protected $hintType = SearchInfo::class; /** * @param Request $object * @param array $params * @return SearchInfo */ public function map($object, $params = []) { return new SearchInfo( $object->get('name'), $object->get('address') ); } }
现在我需要将我的映射器添加到配置文件中
<?php return [ 'mappers' => [ \App\Mappers\RequestToSearchInfoMapper::class, ] ];
现在我可以使用这个映射器。我们将在控制器中这样做
<?php // ... use kepka42\LaravelMapper\Facades\Mapper; // ... public function index(Request $request): Response { $requestInfo = Mapper::map($request, SearchInfo::class); //... return new Response('{}'); }
或
<?php // ... use kepka42\LaravelMapper\Contracts\MapperContract; // ... public function index(Request $request, MapperContract $mapperContract): Response { $requestInfo = $mapperContract->map($request, SearchInfo::class); //... return new Response('{}'); }
许可证
在 MIT 许可证下发布,请参阅 LICENSE。