- tatarko
- Člen | 3
Začínam s Nette a ešte mi nie je až tak moc jasný MVC model. Lepšie povedané v DB mám uloženú štruktúru menu – potreboval by som ju vytiahnuť, spracovať a hodiť do nejakých premenných, s ktorými by som mohol pri šablone neskôr pracovať. Neviete mi poradiť, akej premennej to priradiť?
Navyše každý riadok z DB má poľa presenter a content. A chcel by som docieliť, aby keď presenter obsahuje nejakú hodnotu, tak aby to vyvolalo príslušnú funkciu/objekt/presenter a výsledok priradilo do contentu. Problémom je to, že neviem kam mám tie funkcie/objekty/presentery uložiť a ako ich potom volať…
- Filip Procházka
- Moderator | 4668
chtělo by to nějaký ten app/models/PageModel.php
nějaký ten app/presenters/PagePresenter.php
nějakou tu šablonu app/templates/Page.default.latte
(popř. na
starším nette .phtml
)
Bacha na vykřičník u {!$page->content}
znamená, že
obsah může obsahovat i HTML a proměnná nebude oštřena, spoléhá na
důvěryhodný zdroj
A asi i nějaký pěkný router
Samozřejmě počítáme s tím že v app/bootstrap.php
je
i připojení k databázi
co myslíš, bude to fungovat? :)
Editoval HosipLan (26. 12. 2010 17:17)
- tatarko
- Člen | 3
Ďakujem, pomohlo mi to ako tak pochopiť ako vlastne funguje MVC. No mám ešte pár otázok na ujasnenie:
- Mám model, ktorý mi pripravuje zoznam užívateľov a presenter, ktorý tie dáta vytiahne a pripraví pre view. Keď však potrebujem pripraviť v rámci poľa prechodu aj premenné ako permalink na profil užívateľa, tak túto hodnotu mám generovať ešte pri modeli (to znamená prejdem celým výberom databázy a hodím do novej premennej, ktorú potom vrátim) alebo pri presenteri? Ako som čital, tak model by mal byť tým, kto pripraví všetky dáta z DB…
- Pokiaľ chcem generovať url ako tu na fóre (6248-generovanie-menu-hodnot-pri-mvc). V rámci behu skriptu potrebujem len to ID a zvyšok je tým pádom nepotrebný. Ako by ste odporúčali to potom hodiť do routra + ako generovať potom adresy nato? + je priamo nejaká funkcia na generovanie toho tvaru z názvu položky uloženého v DB, ideálne čo berie aj CZ/SK znaky?
- Dá sa nejako kóšer zistiť, či existuje nejaká metóda predaním stringu – jej názvu? Či len klasicky overovaním existencie triedy?
- Používam dibi a používam zápis ako … → select(…) → from (‚abc, cde‘) … Jednoducho chcem použiť dve tabuľky, no ako to potom odlíšiť pri výbere polí v select(), že ktoré pole je z ktorej tabuľky?
Editoval tatarko (31. 12. 2010 14:12)
- Filip Procházka
- Moderator | 4668
tatarko napsal(a):
- Mám model, ktorý mi pripravuje zoznam užívateľov …
proč bys v databázi měl mít nějaké odkazy?
V nette jsou odkazy samostatná vrstva aplikace, do které spadají routy a generování odkazů v presenterech a view. Čili jakékoliv ukládání odkazů do databáze by byla hloupost, protože by jsi pak nemohl jednoduše měnit schéma routami. Jediné co má smysl ukládat z url do databáze jsou parametry. A protože ti na identifikaci uživatele stačí jeho ID, nemusíš nikam nic ukládat nebo měnit, ale rovnou ho použiješ. :)
tatarko napsal(a):
- Pokiaľ chcem generovať url ako tu na fóre (6248-generovanie-menu-hodnot-pri-mvc). V rámci behu skriptu potrebujem len to ID a zvyšok je tým pádom nepotrebný. Ako by ste odporúčali to potom hodiť do routra + ako generovať potom adresy nato? + je priamo nejaká funkcia na generovanie toho tvaru z názvu položky uloženého v DB, ideálne čo berie aj CZ/SK znaky?
ideálně bych použil model na stránky a vytvořil filter callbacky pro routy
teď se můžeš rozhodnout jestli budeš routu „složitě“ generovat pokaždé, když budeš zapisovat tuto url, nebo použiješ filtr a routy budeš volat takto
a v šabloně
a router si sám vytvoří správnou url. Pokud trváš na generování
v každé url, tak stačí odstranit Route::FILTER_OUT
a do slugu
zapisovat přímo tvou vygenerovaný řetězec
tatarko napsal(a):
- Dá sa nejako kóšer zistiť, či existuje nejaká metóda predaním stringu – jej názvu? Či len klasicky overovaním existencie triedy?
konkretizuj
tatarko napsal(a):
- Používam dibi a používam zápis ako … → select(…) → from (‚abc, cde‘) … Jednoducho chcem použiť dve tabuľky, no ako to potom odlíšiť pri výbere polí v select(), že ktoré pole je z ktorej tabuľky?
// PS. sory za zmatení „slug“ === „node“, nechce se mi to přepisovat :)
Editoval HosipLan (31. 12. 2010 15:56)
- tatarko
- Člen | 3
Linky na užívateľov nechcem ukladať do DB – som sa pýtal na to, či ich generovať pri modeli, či pri presenteri?
Odpoveď na druhú otázku som pochopil, len nie je to trocha veľa zbytočných query na DB? A najmä na webe mám viac presenterov a vždy by to muselo hľadať niekde inde, to by trebalo tiež ošetriť…
Myslel som model – či sa dá nejako efektne zistiť, či existuje napr model PageModel alebo sa to dá len pomocou class_exists()
- Filip Procházka
- Moderator | 4668
- Linky …
v presenteru, tam je přece metoda na generování odkazu
$presenter->link();
:)
- Odpoveď na druhú otázku som pochopil, len nie je to trocha veľa zbytočných query na DB? …
- Myslel som model – či sa dá nejako efektne zistiť, …
můžeš si udělat nějaký registr, založený třeba na
Nette\Context
, do kterého budeš tyto třídy ukládat, nebo
jejich továrničky.
Logicky bych asi zvolil postup, dát do configu továrničku na takovouto třídu
service.ModelsLocator.factory = ModelsLocator::createModelsLocator
napsat si třídu ModelsLocator
, něco jako
teď potřebuješ nějak to nacpat do presenteru
abys v presenteru mohl volat
a v routeru podobně
to je o hodně lepší ne? :)
A co se týče „hodně dotazů na query“ můžeš si třeba implementovat jednoduché kešování.
Editoval HosipLan (31. 12. 2010 18:12)