janpecha / leanmapper-extension
LeanMapper extension for Nette DI
Fund package maintenance!
Other
Installs: 8 777
Dependents: 1
Suggesters: 0
Security: 0
Stars: 4
Watchers: 3
Forks: 0
Open Issues: 1
Requires
- php: >=7.2.0
- czproject/assert: ^1.3
- inlm/mappers: ^2.1 || ^3.0
- nette/di: ^3.0
- tharos/leanmapper: ^4.0
Requires (Dev)
- nette/bootstrap: ^3.0
- nette/tester: ^2.0
- tracy/tracy: ^2.6
README
Lean Mapper extension for Nette.
Installation
Download a latest package or use Composer:
composer require janpecha/leanmapper-extension
Extension requires:
- PHP 7.2 or later
- Nette 3.0 or later
- LeanMapper 4.0 or later
Usage
extensions: leanmapper: JP\LeanMapperExtension\LeanMapperExtension leanmapper: # database connection username: ... password: ... database: ...
Configuration
Database connection
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
leanmapper: entityFactory: LeanMapper\DefaultEntityFactory entityMapping: table: EntityClass 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
leanmapper: mapper: true # bool defaultEntityNamespace: 'Model\Entity' nameMapping: camelcase # default | camelcase | underscore prefix: null
Support for addons
use Nette\DI\CompilerExtension; use JP\LeanMapperExtension\IEntityProvider; 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 ), // ... ); } }
STI mapping
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
use Nette\DI\CompilerExtension; use JP\LeanMapperExtension\IRowMappingProvider; class FooExtension extends CompilerExtension implements IRowMappingProvider { function getRowFieldMappings() { return [ \Model\Entity\OrderItem::class => [ 'currency' => [ 'fromDbValue' => [static::class, 'currencyFromDb'], 'toDbValue' => [static::class, 'currencyToDb'], ] ], // ... ]; } 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], ]; } }
License: New BSD License
Author: Jan Pecha, http://janpecha.iunas.cz/