Nette 2.1 QuickStart – presenter sam vytahuje data z db?
- jedelex
- Člen | 16
Ked som si teraz rychlo prechadzal quickstart pre nette 2.1 narazil som na takuto vec :
<?php
class HomepagePresenter extends BasePresenter
{
/** @var Nette\Database\Context */
private $database;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
public function renderDefault()
{
$this->template->posts = $this->database->table('posts')
->order('created_at DESC')
->limit(5);
}
}
?>
Preco presenter sam saha na DB, ked MVC/MVP architektrura hovori,ze: Presenter poziada model o data a tie preda sablone pre vykreslenie ? Nemalo by tam teda byt napr. v metode startup() spojenie preseteru s modelom a ten by uz nasledne tahal data z db ?
Dik za info
- Oli
- Člen | 1215
Předpokládám, že to je pro jednoduchost. Aby jsi nezahltil začátečníky. Popravdě mě to ale taky zaráží. Svého času byl v quickstartu myslím příklad s contextem, kterej se na foru doporučoval nepoužívat.
Pokud to chceš hodit do modelu, tak předávat model presenteru v konstruktoru je správně. Pak by to vypadalo nějak takhle:
class HomepagePresenter extends BasePresenter
{
/** @var Model\PagesRepository */
private $pages;
public function __construct(Model\PagesRepository $pages)
{
$this->pages = $pages;
}
public function renderDefault()
{
$this->template->posts = $this->pages->getPosts();
}
}
- jedelex
- Člen | 16
Myslim si, ze prave na jednoduchom priklade by mali prezentovat MVC architekturu v praxi. Ano jednoho casu bolo v quickstarte nieco taketo :
<?php
class CategoryPresenter extends BasePresenter{
/** @var Model\CategoryRepository */
private $categoryRepository;
protected function startup()
{
parent::startup();
// spojenie presenteru s modelom
$this->categoryRepository = $this->context->categoryRepository;
}
}
?>
a mne prave toto velmi pomohlo aby som si predstavil tu zakladnu myslienku MVC/MVP.
Nepostrehol som preco nieje dobre pouzivat context, stretol som sa s tym ale nikto mi zatial nepovedal preco ? Vies mi prosim ta povedat ? A asi to nepatri do tohto vlakna ale patri to k nette 2.1, v configu uz nie su sekcie ‚production‘ a ‚development‘, chapem to spravne ze si mam spravit jeden config pre zivy server e jeden pre devel server ?
Dakujem
- Milo
- Nette Core | 1283
@jedelex QuickStart byl záměrně zjednodušen právě o modelovou vrstvu. Jde v něm hlavně o to, aby se nováček rozkoukal a naučil se, jak se dělají akce v prezenteru, jak to souvisí se šablonami a podobně.
Modelová vrstva je také kompromis:
# Myslíš že
$this->template->time = time();
# by mělo být
$this->template->time = $this->timeModel->getCurrentTime();
Určitě více lidí se shodne, že by teda bylo potřeba napsat Quickstart II a tam to více rozebrat. Hlásí se dobrovolní? :)
Osobně si myslím, že současný Quickstart je OK.
- Milo
- Nette Core | 1283
@jedelex Ke kontextu…
Nedoporučuje se to, protože kontext obsahuje všechny služby. Jakmile
začne kód narůstat, tak se použití $this->context
může
někam zahrabat a najednou se hůř hledá, na čem je prezenter závislý.
Když použiješ anotaci @inject nebo inject() metody, z vygenerované dokumentace hezky uvidíš, co prezenter chce.
- Milo
- Nette Core | 1283
@jedelex
Sekce z konfigu nikam nezmizely, můžeš je používat stále pokud Ti vyhovují.
Když se ale do Nette přidala možnost mít více konfigů, potřeba sekcí odpadla. Tím, že si udržuješ lokální konfig, můžeš ho například úplně vyřadit z verzování, nebo jich mít více s každým novým deployem, nebo pro CLI volání zvlášť a tak…
- MartinitCZ
- Člen | 580
@**Oli**: Osobně jsem proto, aby se __constructor v presenterch zakázal. Od té doby, co se to tam objevilo, je tu plno dotazů „proč to nefunguje“ a pak se zjistí, že zapomněl na parent::__constructor();
Lepší je použít anotace @inject nebo třídu inject<Name>(Name $a) {…}
Editoval martinit (7. 1. 2014 20:39)
- Filip Procházka
- Moderator | 4668
Když si rozebereme slovo quickstart tak zjistíme že se skládá ze slov quick a start, tedy rychlý start.
Quickstart byl schválně psán co nejjednodušeji, aby ho měli šanci pochopit i začátečníci s PHP, měli šanci začít používat Nette a rychle psát aplikace. Když do toho zamotáte modely a DI tak všechny začátečníky odstřihnete, protože přeď ně postavíte brutální zeď.
Psát druhý Quickstart imho není úplně dobrý nápad, ale psát tutorial který bude navazovat na quickstart a přepíše ho na modely (což je logická evoluce) by ale mohlo být fajn. Už to ale nebude quickstart, tak tomu tak neříkejme.