Nette ❤ DI
@ProchazkaFilip - @Damejidlo
Co si povíme?
- rychle prolítneme teorii DI
- jak to funguje v Nette
- jak napsat použitelné rozšíření
Teorie: typy injekce
- konstruktor
- setter
- property
- magie
Konstruktor injection
class Cart extends NetteObject {
private $entityManager;
public function __construct(EntityManager $em) {
$this->entityManager = $em;
}

http://wbab.suffolk.lib.ny.us/wp-content/uploads/2013/12/medals.jpg
Setter injection
class Cart extends NetteObject {
private $entityManager;
public function setEntityManager(EntityManager $em) {
$this->entityManager = $em;
}

http://wbab.suffolk.lib.ny.us/wp-content/uploads/2013/12/medals.jpg
Property injection
class Cart extends NetteObject {
/** @var EntityManager */
public $entityManager;

http://wbab.suffolk.lib.ny.us/wp-content/uploads/2013/12/medals.jpg
Magic injection
class Cart extends NetteObject {
/** @var EntityManager */
private $entityManager;

http://www.wyatt-lorenz.com/images/biohazard_warnings.jpg
Teorie: slovníček
- DI Container (composition root)
- služby
- implementace / abstrakce
Praxe: konfigurace
- služby
- rozšíření
Registrace služby
services:
- DamejidloCart()
Konfigurace rozšíření
nette:
latte:
macros:
- AssetsCssMacro
Bacha na zanoření
parameters:
services:
nette:
Praxe: typy služeb
- modely
- presentery
- komponenty
Modely
- konstruktor (99.99%)
- setter (když jsi v úzkých)
- property (ehm?)
Presentery
- konstruktor (myslím že ne Time)
- setter inject*() (přihořívá)
- property @inject (vítěz!)
/** @var DamejidloCart @inject */
public $cart;
Presentery
services:
productListPresenter:
class: ShopModuleProductsPresenter()
setup:
- $tempPath(%tempPath%)
# nebo
- BlogModuleArticlePresenter()
Komponenty
- konstruktor (ano prosím!)
- setter (meh?)
- property (bleh)
Komponenty v presenterech
protected function createComponentForm()
{
return new OrderForm($entityManager???)
}
Ruční továrničky
class OrderFormFactory {
private $em;
function __construct(EntityManager $em) { … }
/** @return OrderForm */
public function create() {
return new OrderForm($this->em);
}
Generované továrničky
interface IOrderFormFactory {
/** @return OrderForm */
function create();
}
Generované továrničky
services:
orderFormFactory:
implement: IOrderFormFactory
# nebo
- {implement: IOrderFormFactory}
Generované továrničky
/** @var IOrderFormFactory @inject */
public $orderFormFactory;
protected function createComponentOrderForm()
{
$form = $this->orderFormFactory->create();
$form->onSuccess[] = ...;
return $form
}
Rozšíření
class OrmExtension extends CompilerExtension {
# vytvori služby
public function loadConfiguration() { }
# upravuje své a jiné služby
public function beforeCompile() { }
# hackuje DI container
public function afterCompile() { }
Dobré rozšíření
- Composer - MUST HAVE
- Jednoduchá registrace
- Convention over Configuration
- validujte
Dotazy?

More Related Content

PDF
Doctrine: co dělat, když entity nestačí
PDF
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
PDF
Usnadněte si soužití s Doctrine
PDF
Nette framework - How to compile an extensible di container
PDF
Doctrine ORM & model
PDF
Kdyby/Redis
PDF
CQRS v rohlik.cz
PDF
Kdyby/Events #posobota
Doctrine: co dělat, když entity nestačí
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Usnadněte si soužití s Doctrine
Nette framework - How to compile an extensible di container
Doctrine ORM & model
Kdyby/Redis
CQRS v rohlik.cz
Kdyby/Events #posobota

What's hot (9)

PDF
Kdyby/Events
PPTX
MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)
PDF
CRCE - přehled datového modelu a vybraná API
PDF
Drupal Front-end
PPTX
Clean code
PDF
Adam Šimek: Optimalizace skrolování, RecyclerView
PDF
Spring dao
PDF
Jak přemigrovat Slevomat na Doctrine za jedno dopoledne
PPTX
jQuery: full frontal
Kdyby/Events
MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)
CRCE - přehled datového modelu a vybraná API
Drupal Front-end
Clean code
Adam Šimek: Optimalizace skrolování, RecyclerView
Spring dao
Jak přemigrovat Slevomat na Doctrine za jedno dopoledne
jQuery: full frontal
Ad

More from Filip Procházka (7)

PDF
4 roky remote
PDF
Před čím vás Nette ani Symfony neochrání
PDF
Nejlepší cache je žádná cache
PDF
Testování prakticky
PDF
Kdyby/Translation
PDF
Nette Tester / Posobota
PDF
Composer / Posobota
4 roky remote
Před čím vás Nette ani Symfony neochrání
Nejlepší cache je žádná cache
Testování prakticky
Kdyby/Translation
Nette Tester / Posobota
Composer / Posobota
Ad

Dependency injection v Nette 2.1 prakticky