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 » |