Skip to content

integrace lean mapperu do aplikace

Jan Pecha edited this page Jun 18, 2014 · 3 revisions

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. 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\BookRepository
	- Model\AuthorRepository
	- ...

	# ...

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

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.

Tip: pokud nechcete, nebo nemůžete použít anotaci @inject, lze pro předání repositáře použít inject*() metodu.