1. Go to this page and download the library: Download cmath10/mapper library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
cmath10 / mapper example snippets
class ArticleInput
{
public $title;
public $text;
public $author;
}
class Article
{
public $title;
public $text;
public $author;
public function __construct(?string $title = null)
{
$this->title = $title;
}
}
$input = new ArticleInput();
$input->title = 'title';
$input->text = 'text';
$article1 = new Article();
$mapper = new cmath10\Mapper\Mapper();
$mapper->create(ArticleInput::class, Article::class);
$mapper->map($input, $article1);
// ($article1->title === 'title') === true
// ($article1->text === 'text') === true
$article2 = $mapper->map($input, Article::class)
// ($article2 instanceof Article) === true
// ($article2->title === 'title') === true
// ($article2->text === 'text') === true
use cmath10\Mapper\AbstractMap;
class ArticleOutputMap extends AbstractMap
{
public function __construct()
{
$this
->setupDefaults() // create default accessors set
->route('textNotMappedByDefault', 'text') // customize
;
}
public function getSourceType(): string
{
return Article::class;
}
public function getDestinationType(): string
{
return ArticleOutput::class;
}
}
use cmath10\Mapper\Mapper;
use cmath10\Mapper\FieldAccessor\ClosureAccessor;
$mapper = new Mapper();
$mapper
->create(Fixtures\Article::class, Fixtures\ArticleInput::class)
->forMember('author', new ClosureAccessor(fn (Fixtures\ArticleInput $a) => $a->author->name))
;
use cmath10\Mapper\Mapper;
use cmath10\Mapper\FieldAccessor\ExpressionAccessor;
$mapper = new Mapper();
$mapper
->create(Fixtures\MagazineWithPrivateProperties::class, Fixtures\MagazineOutput::class)
->forMember('articles', new ExpressionAccessor('getArticles()'))
;
use cmath10\Mapper\Mapper;
use cmath10\Mapper\FieldAccessor\PresetAccessor;
$mapper = new Mapper();
$mapper
->create(Fixtures\MagazineWithPrivateProperties::class, Fixtures\MagazineOutput::class)
->forMember('articles', new PresetAccessor([]))
;
use cmath10\Mapper\Mapper;
use cmath10\Mapper\FieldAccessor\PropertyPathAccessor;
$mapper = new Mapper();
$mapper
->create(Fixtures\MagazineWithPrivateProperties::class, Fixtures\MagazineOutput::class)
->forMember('articles', new PropertyPathAccessor('someFieldWithArticles'))
;
use cmath10\Mapper\Mapper;
use cmath10\Mapper\FieldAccessor\PropertyPathAccessor;
$mapper = new Mapper();
$mapper
->create(Fixtures\MagazineWithPrivateProperties::class, Fixtures\MagazineOutput::class)
->route('articles', 'someFieldWithArticles')
;
use cmath10\Mapper\Mapper;
use cmath10\Mapper\FieldFilter\ClosureFilter;
// For ArticleInput title='title' we will get Article title='[[title]]'
$mapper = new Mapper();
$mapper
->create(Fixtures\ArticleInput::class, Fixtures\Article::class)
->filter('title', new ClosureFilter(static fn ($title) => '[[' . $title . ']]'))
;
use cmath10\Mapper\Mapper;
use cmath10\Mapper\FieldFilter\IfNullFilter;
// For ArticleInput title=null we will get Article title='defaultTitle'
$mapper = new Mapper();
$mapper
->create(Fixtures\ArticleInput::class, Fixtures\Article::class)
->filter('title', new IfNullFilter('defaultTitle'))
;
use cmath10\Mapper\Mapper;
use cmath10\Mapper\FieldFilter\ObjectMappingFilter;
$mapper = new Mapper();
$mapper->create(Fixtures\AuthorInput::class, Fixtures\Author::class);
$mapper
->create(Fixtures\ArticleInput::class, Fixtures\Article::class)
->route('author', 'author')
->filter('author', new ObjectMappingFilter(Fixtures\Author::class))
;
use cmath10\Mapper\Mapper;
use cmath10\Mapper\FieldFilter\ObjectArrayMappingFilter;
$mapper = new Mapper();
$mapper->create(Fixtures\Article::class, Fixtures\ArticleOutput::class);
$mapper
->create(Fixtures\Magazine::class, Fixtures\MagazineOutput::class)
->route('articles', 'articles')
->filter('articles', new ObjectArrayMappingFilter(Fixtures\ArticleOutput::class))
;
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.