Jak to tam vstříknout? Co tam vstříknout?

Co tam vstříknout?
Nette DI cheatsheet
Jak to tam vstříknout?
(uvedenou třídu/rozhraní vždy vyžádejte dle postupu vlevo)
Constructor injection
Cache (doc)
public function __construct(IMailer $mailer)
Method injection (inject* metoda)
public function injectMailer(IMailer $mailer)
Property injection (@inject anotace)
Konstruktor
Presenter
Komponenta s
továrnou
Služba

1)
Metoda inject

@inject



//ve $storage je injectované IStorage
$cache = new Nette\Caching\Cache($storage);
$cache->load($key);
HTTP (doc)
/** @var \Nette\Mail\IMailer @inject */
public $mailer;
Co kde použít?
Vyžadujte rozhraní Nette\Caching\IStorage
2)


2) 3)


HTTP požadavek: Nette\Http\IRequest
getUrl() - Nette\Http\UrlScript
getHeaders() - pole hlaviček
getHeader($header)
getCookie($key, $default = NULL)
getRemoteAddress()
...
HTTP odpověď: Nette\Http\IResponse
Session (doc)
Vyžadujte Nette\Http\Session
//v $session je injectnute Session
$section = $session->getSection($mySection);
$section->key = $value;
Databáze (doc)
Vyžadujte Nette\Database\Context
query($query[, $arg[,...]]) - provede dotaz
table($name) - vrátí Nette\Database\Selection
Uživatel a zabezpečení (doc)
Uživatel - Nette\Security\User
isLoggedIn()
getIdentity()
getRoles()
isInRole($role)
isAllowed($resource, $privilege)
setCode($code)
login($id = NULL, $password = NULL)
1) starý způsob, nyní použijte raději @inject anotace
setCookie($cookie, $value, $expire, ...)
logout($clearIdentity = FALSE)
2) je nutno zapnout v neonu inject: true u dané služby/komponenty
setHeader($header, $value)
3) vhodné pouze pro specifcké případy jako BaseControl a
injectování TemplateFactory. Jinak používejte konstruktor
   - doporučeno
  - klidně použijte
 - vyvarujte se
 - vážně nedoporučeno
isSent()
...
Maily (doc)
Vyžadujte Nette\Mail\IMailer
TIP
Zkuste také rozšíření Kdyby/Autowired
(github.com/kdyby/autowired), které umožňuje pracovat
se závislostmi podobným způsobem jako anotace
@inject , ale služby načítá "lazy", tedy až ve chvíli, kdy
jsou skutečně potřeba.
//v $mailer je injectnuty IMailer
$message = new Nette\Mail\Message();
$message->addTo($to);
...
$mailer->send($message);
Autorizátor - Nette\Security\IAuthorizator
Autentikátor - Nette\Security\IAuthenticator
User storage - Nette\Security\IUserStorage
Aplikace
Aplikace - Nette\Application\Application
getPresenter() - vrátí aktuální presenter
Router - Nette\Application\IRouter
constructUrl($appRequest, $refUrl) - vytvoří URL pro
aplikační požadavek
© 2014 David Matějka
Licence CC BY-SA 3.0