LeanMapper-extension
, (*1)
Lean Mapper extension for Nette., (*2)
, (*3)
Installation
Download a latest package or use Composer:, (*4)
composer require janpecha/leanmapper-extension
Extension requires:
* PHP 7.2 or later
* Nette 3.0 or later
* LeanMapper 4.0 or later, (*5)
Usage
``` neon
extensions:
leanmapper: JP\LeanMapperExtension\LeanMapperExtension, (*6)
leanmapper:
# database connection
username: ...
password: ...
database: ..., (*7)
Configuration
-------------
### Database connection
``` neon
leanmapper:
# required
username: ...
password: ...
database: ...
# optional
connection: LeanMapper\Connection
host: localhost
driver: mysqli
lazy: true
profiler: ... # on|off or NULL => enabled in debug mode, disabled in production mode
charset: utf8mb
Entities
``` neon
leanmapper:
entityFactory: LeanMapper\DefaultEntityFactory
entityMapping:
table: EntityClass, (*8)
table:
entity: EntityClass
repository: RepositoryClass # only mapping, you need manually register repository to DI
primaryKey: table_primary_key
articles:
entity: App\Model\Article
primaryKey: article_id
### Mapper
``` neon
leanmapper:
mapper: true # bool
defaultEntityNamespace: 'Model\Entity'
nameMapping: camelcase # default | camelcase | underscore
prefix: null
Support for addons
``` php
use Nette\DI\CompilerExtension;
use JP\LeanMapperExtension\IEntityProvider;, (*9)
class FooExtension extends CompilerExtension implements IEntityProvider
{
// from IEntityProvider
function getEntityMappings()
{
return array(
array(
'table' => 'foo_articles',
'primaryKey' => 'id',
'entity' => Foo\Model\Article::class,
'repository' => Foo\Model\ArticleRepository::class, # only mapping, you need manually register repository to DI
),
// ...
);
}
}, (*10)
STI mapping
``` php
use Nette\DI\CompilerExtension;
use JP\LeanMapperExtension\IStiMappingProvider;
class FooExtension extends CompilerExtension implements IStiMappingProvider
{
function getStiMappings()
{
return [
Model\Entity\Client::class => [ // base entity
// type => target entity
'company' => Model\Entity\ClientCompany::class,
],
// ...
];
}
function getStiTypeFields()
{
return [
Model\Entity\Client::class => 'clientType',
];
}
}
Row mapping, (*11)
``` php
use Nette\DI\CompilerExtension;
use JP\LeanMapperExtension\IRowMappingProvider;, (*12)
class FooExtension extends CompilerExtension implements IRowMappingProvider
{
function getRowFieldMappings()
{
return [
\Model\Entity\OrderItem::class => [
'currency' => [
'fromDbValue' => [static::class, 'currencyFromDb'],
'toDbValue' => [static::class, 'currencyToDb'],
]
],
// ...
];
}, (*13)
function getRowMultiValueMappings()
{
return [
\Model\Entity\OrderItem::class => [
'price' => [
'fromDbValue' => [static::class, 'priceFromDb'],
'toDbValue' => [static::class, 'priceToDb'],
],
],
];
}
static function currencyFromDb($value)
{
return strtoupper($value);
}
static function currencyToDb($value)
{
return strtolower($value);
}
static function priceFromDb(array $values)
{
return [$values['price'], $values['currency']];
}
static function priceToDb($value)
{
return [
'price' => $value[0],
];
}
}
```, (*14)
License: New BSD License
Author: Jan Pecha, http://janpecha.iunas.cz/, (*15)