Předávání dat z šablony do presenterů

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
jim.street
Člen | 26
+
0
-

Ahoj,
nevěděl jsem, jak toto téma pojmenovat. Zkusím proto rozebrat svůj problém po lopatě.

Mám šablonu Homepage:vysledky. Tato šablona vypisuje řešitele úloh, kolik získali bodů za jednotlivé úlohy a podobně. Tyto data jí předává HomepagePresenter a šablona tyto uživatele vypisuje přes foreach. Jenže, já jakožto přihlášený uživatel bych si rád rozklikl například profil nejlepšího řešitele. Proto jsem do foreache vložil odkaz, který odkazuje na šablonu Profile:show, jednoduše <a href=„{link Profile:show}“>.
Jenže, potřeboval bych předat nějaký parametr (např user[‚id‘], popř. celého usera). Odhaduji, že by to mohlo být nějak takto – <a href=„{link Profile:show, $user}“>. Jenže, nevím, co dál, jak s $user pracovat.
V ideálním případě bych měl metodu renderShow v ProfilePresenteru, která by mi pomocí předaného uživatele z šablony Homepage:vysledky vyhledala daného uživatele v DB a předala jeho jméno a příjmení. Mohl by mi někdo poradit, jak na to?

Michal Vyšinský
Člen | 608
+
+1
-

Do link si pošli pouze id:

<a href="{link Profile:show id=>$id}">

V renderShow pak dostaneš jako parametr $id onnu hodnotu, pomocí které si znovu vytáhneš z databáze potřebná data.

public function renderShow($id) {
  $this->template->user = // zde najdi uživatele podle id, předá se ti do šablony
}
Oli
Člen | 1215
+
0
-

Pokud nemáš víc parametrů a předáváš je ve stejném pořadí jako je v action/render metodě přijímáš, tak nemusíš uvádět ani ten klíč (id).

jim.street
Člen | 26
+
0
-

Dík.

Potřeboval bych se ještě zeptat, moc se mi nechtějí psát query do presenterů. Radši bych jej zapsal do modelu. Mám model ‚Uzivatele‘. Napsal jsem si do něj funkci:
public function getUserFromId($id)
{
return $this->database->getUser()->where(‚id‘ = $id); // nevim jeslti jo syntakticky spravne
}

V presenteru mám prozatím:
public function renderShow($id)
{
$this->template->user = /TODO/;
}

Jak bych měl správně zavolat funkci getUserFromId z modelu Uzivatele? Pripadne vyvorit si v prezenteru instanci Uzivatele::getInstance() ?

Editoval jim.street (8. 10. 2014 17:12)

jim.street
Člen | 26
+
0
-

Jinak, připojení k DB mám zaregistrováno jako službu.

Michal Vyšinský
Člen | 608
+
+2
-

Možná by to chtělo projít dokumentaci… Třídu Uzivatele si registruj jako službu a injektni si ji do presenteru.

Editoval Michal Vyšinský (8. 10. 2014 17:36)

Azathoth
Člen | 495
+
0
-

jim.street: doporučuji se podívat na sandbox a jak je injectnutý UserManager do presenteru. Přesně takhle bys to měl udělat.