-
Notifications
You must be signed in to change notification settings - Fork 36
integrace lean mapperu do aplikace
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
.
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;
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;
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.
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.
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.