Správné vytváření komponent a jejich propojení s presenterem
- besir
- Člen | 170
Ahoj, pokud to tu někdo řešil tak mě kopněte na správné vlákno, já to nenašel. Tak jako klasicky zase jsem jednou narazil… Nepoužívám nette až tak moc, ale zajímalo by mě jak vlastně vypadá nejlepší způsob vytvoření a použití komponent.
Příklad:
Mám dvě komponenty:
namespace App\PrivateModule\Component;
class MyOwnedTask extends \Nette\Application\UI\Control
{
...
namespace App\PrivateModule\Component;
class MyResolvedTask extends \Nette\Application\UI\Control
{
...
Komponenty zaregistrováné jako services, ALE… pokud jim v configu nenastavím autowired: no tak si stěžují: „Multiple services of type Nette\ComponentModel\IContainer found: MyOwnedTask, MyResolwedTask“
a pokud jim autowired: no nastavím tak dostanu za uši s „No service of type App\PrivateModule\Component\MyResolvedTask found.“ a nemohu tak použít v presenteru inject metodu. A musel bych komponentu presenteru předat třeba konstruktorem.
Trochu jsem si myslel (asi jsem najivní), že pokud v inject metodě prostě chci \App\PrivateModule\Component\MyOwnedTask tak ho nebudou zajímat předci… zdá se, že zatím v těchto automagických věcech nemám uplně jasno…
Nette: 2.2.0
Díky
Editoval besir (30. 12. 2014 15:46)
- David Matějka
- Moderator | 6445
Muze za to tento
konstruktor v CM\Component. V masteru je to jiz vyreseny.
Nyni to vyresis tak, ze ve vsech komponentach prekryjes konstruktor, i pokud
nevyzadujes zadnou zavislost:
public function __construct()
{
parent::__construct();
}
btw, nemas ty komponenty primo registrovane jako sluzby, ze ne??
Editoval matej21 (30. 12. 2014 16:03)
- Zax
- Člen | 370
Do configu patří služby, což obvykle (ne vždy) znamená jednu jedinou
instanci nějaké konkrétní třídy (či interfacu). Pokud něco ve službě
změníš, obvykle se to projeví v celé aplikaci, jenže komponenty chceme
často použít víckrát (ať už napříč projektem, nebo jen v jenom
presenteru pomocí Multiplieru) a chceme je mít na sobě nezávislé, proto je
dobrým zvykem si pro každou komponentu vytvořit službu – továrnu –
která nám dokáže takovou nezávislou komponentu vyrobit zavoláním metody
create()
. Viz odkaz nade mnou ;-)