Pracování s Doctrinou v komponentě – inject \Kdyby\Doctrine\EntityManager
- kloban
- Člen | 123
Ahoj,
rozhodl jsem se posunout v nette trošku dál a začít zkoumat a hlavně
používat komponenty. Zaroveň jsem se rozhodl začít s \kdyby\Doctrine.
Postupuji podle začátečníckého návodu (http://blog.honzacerny.com/…te-framework) ve kterém se injectuje Doctrina pomocí anotace:
/**
* @inject
* @var \Kdyby\Doctrine\EntityManager
*/
public $EntityManager;
Problém je, že toto se v komponentě nedá použít. Byl jsem odkázán na
dokumentaci (https://doc.nette.org/…dependencies#…),
kde se řeší právě injectování do komponenty.
Metoda createComponent tedy má vypadat nějak takto:
/** @inject @var \App\Service1 */
private $service1;
protected function createCompoonentMyControl()
{
$control = new MyControl($this->service1);
return $control;
}
Problém je, že já mám ke komponentě vytvořené ještě rozhraní s metodou create. Proto moje metoda createComponent v presenteru vypadá takto:
/**
* @var \App\AdministrationModule\Components\Ctest\ICtestControlFactory
* @inject
*/
public $ctestControlFactory;
/**
* Ctest control factory.
* @return CtestControl
*/
protected function createComponentCtest()
{
$control = $this->ctestControlFactory->create();
return $control;
}
Nevím tedy jak mohu docílit injectnutí EntityManageru.
Díky za rady, Dan.
- akadlec
- Člen | 1326
a o inject metodě si slyšel? Případě o constructoru? Toto není o doctrině ale o používání služeb v komponentách.
class MyComponent extend \Nette\Application\UI\Control
{
protected $coolService;
protected $nextService;
public function injectSomeService(\My\Cool\Service $coolService, \My\Other\Service $nextService)
{
$this->coolService = $coolService;
$this->nextService = $nextService;
}
}
class MyComponent extend \Nette\Application\UI\Control
{
protected $coolService;
protected $nextService;
public function __construct(\My\Cool\Service $coolService, \My\Other\Service $nextService)
{
$this->coolService = $coolService;
$this->nextService = $nextService;
}
}
Případně je tady ještě extension Kdyby/Autowired která ti přínáší Syntax sugar i do komponent.
Editoval akadlec (15. 5. 2015 9:06)