Integrace Lean Mapperu do aplikace

Vytvoření připojení

Vytvoříme si objekt LeanMapper\Connection a předáme mu parametry potřebné pro připojení k databázi.

$connection = new LeanMapper\Connection([
    'driver'   => 'mysqli',
    'host'     => 'localhost',
    'username' => 'root',
    'password' => '***',
    'database' => 'mydatabase',
]);

Tip: LeanMapper\Connection přebírá stejné parametry jako třída Dibi\Connection.

Mapper

Dále potřebujeme objekt implementující LeanMapper\IMapper. Lean Mapper nám poskytuje výchozí implementaci formou třídy LeanMapper\DefaultMapper.

$mapper = new LeanMapper\DefaultMapper;

Entity factory

A jako poslední věc vytvoříme objekt, který implementuje rozhraní LeanMapper\IEntityFactory. Lean Mapper nám opět podává pomocnou ruku prostřednictvím třídy LeanMapper\DefaultEntityFactory.

$entityFactory = new LeanMapper\DefaultEntityFactory;

Repositáře

Abychom mohli pracovat s entitami, potřebujeme k tomu repositáře. Předpokládejme, že máme repositář napsaný, nyní ho jen vytvoříme a předáme mu potřebné závislosti.

$bookRepository = new Model\BookRepository($connection, $mapper, $entityFactory);

A to je vše.

Integrace do Nette aplikace

Ještě si ukážeme, jak použít Lean Mapper v rámci aplikace napsané v Nette.

DI rozšíření

Doporučenou cestou je použití DI rozšíření. Do konfiguračního souboru aplikace (config.neon) si přidáme následující definici:

extensions:
    leanmapper: LeanMapper\Bridges\Nette\DI\LeanMapperExtension

leanmapper:
    db:
        driver: mysqli
        host: localhost
        username: ...
        password: ...
        database: mydatabase

services:
    - Model\BookRepository

Poznámka: rozšíření je dostupné od verze 3.0.

Pokud vám výchozí DI rozšíření nevyhovuje, můžete zkusit doplňky vyvíjené komunitou.

Ruční definice

Pokud nechceme, nebo nemůžeme použít předpřipravené DI rozšíření, můžeme jednotlivé služby definovat ručně. Do konfiguračního souboru aplikace (config.neon) si přídáme následující parametry a definice služeb:

parameters:
    # údaje pro připojení k DB
    leanmapper:
        driver: mysqli
        host: localhost
        username: ...
        password: ...
        database: mydatabase

services:
    # registrace Lean Mapperu
    - LeanMapper\Connection(%leanmapper%)
    - LeanMapper\DefaultMapper
    - LeanMapper\DefaultEntityFactory

    # registrace repositářů
    - Model\AuthorRepository
    - Model\BookRepository

Repositářům nemusíme ručně předávat závislosti, o to se automaticky postará auto-wiring v Nette.

Předání repositáře do presenteru

Preferovaným způsobem je předání závislostí přes konstruktor.

class BookPresenter extends BasePresenter {
    /** @var \Model\BookRepository */
    private $bookRepository;

    public function __construct(\Model\BookRepository $bookRepository)
    {
        $this->bookRepository = $bookRepository;
    }
}

Alternativně můžeme použít anotaci @inject.

class BookPresenter extends BasePresenter {
    /** @var \Model\BookRepository @inject */
    public $bookRepository;

    ...
}

V rámci presenteru pak máme repositář přístupný přes $this->bookRepository.

« Mapper SQL strategie »