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(array(
    'driver'   => 'mysqli',
    'host'     => 'localhost',
    'username' => 'root',
    'password' => '***',
    'database' => 'mydatabase',
));

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

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.

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ě lze pro předání repositáře do presenteru můžeme využí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 »