Vkládání modelů do presenteru
- bluray
- Člen | 178
Dobrý den, chci se zeptat jak funguje vkládání modelů do presenterů. Je
možné vytvářet jejich instance přímo v presenteru?
Vím že je lze registrovat jako službu, ale pokud mám hodně modelů, bylo by
to přece zdlouhavé.
A pokud budu model vytvářet jako službu, nevím jak jí předám nějaké
parametry.
Například budu mít model:
class User
{
public function __construct($id, $name, $email){
}
}
Jde tento model zaregistrovat jako službu? parametry konstruktoru doplní až presenter z formuláře.
Díky za rady
- Tomáš Votruba
- Moderator | 1114
Pokud chceš vytvářet instance přímo v presenteru, nemohou být registrovány jako služby (jejich instance vytváří Nette samo).
Čeho chceš přesně docílit? Možná by to šlo elegantněji.
Můžeš stejná data předat metodě, kterou bys volal tam kde potřebuješ – doplní až presenter z formuláře?
- bluray
- Člen | 178
Neřeším ted žádný konkrétní případ, nebo spíš ano, vím o dvou
možnostech jak vytvářet modely, bud vytvořit instanci v presenteru, nebo ho
vkládat jako službu. S nette se teprve seznamuji tak bych chtěl vědět jak
se to dělá správně.
Data bych sice metodě předávat mohl, ale když použiju třídu
z předchozího příkladu…Budu načítat uživatele z databáze třeba do
pole instancí třídy User, tam budu potřebovat data zadávat do
konstruktoru.
Další věc je to DI. začínám mít v tom zmatek. Pro přístup k db musí
mít každý model v konstruktoru Context, to mi taky nepřijde příliš
vhodné. Já jsem to vyřešil tak, že jsem udělal třídu Model která
kontext sama vytváří a ostatní jsou jejími potomky.
Jenom mi jde o to, ujistit se že to dělám správně a popřípadě získat
nějaké tipy od zkušenějších :)
- David Matějka
- Moderator | 6445
V tvem pripade vypada User
jako nejaka entita nebo jako nejaka
prepravka na data. Takova trida nema byt registrovana jako sluzba – jako
sluzba by mela byt registrovana trida, ktera s tim pracuje, treba
UserManager
coz by byla trida, ktera by onu User
nacitala, ukladala, mazala…
Já jsem to vyřešil tak, že jsem udělal třídu Model která kontext sama vytváří a ostatní jsou jejími potomky.
jako pro kazdou instanci vytvori novy Context s vlastnim pripojenim do db? to opravdu neni idealni :)
Pro přístup k db musí mít každý model v konstruktoru Context, to mi taky nepřijde příliš vhodné
To je prave princip DI, jen uvedu zavislosti, ktere chci a uz je na nekom jinem (v tomto pripade na DI kontejneru), aby zavislosti predal. Vubec se nechci starat o to, jak tu tridu vytvorit atd.