Začátečníkův dotaz na způsob zápisu

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

Zdravím všechny. Při pokusu pobrat alespoň ty úplné základy Nette jsem velmi brzy narazil. V úvodním tutoriálu je krátce po začátku k vidění následující kód:

<?php
public function renderDefault()
{
    $this->template->posts = $this->database->table('posts')
        ->order('created_at DESC')
        ->limit(5);
}
?>

Mohl by mi prosím někdo krok po kroku napsat, co tento kód provede?

Problém pro mě představuje, že nerozumím tomu vícenásobnému použití operátoru „->“ několikrát za sebou. Samozřejmě vím, na co se operátor v PHP používá, ale nerozumím tomu jeho vícenásobnému použití za sebou. Dále jsem si přečetl něco řetězení a kaskádování metod v PHP, ale to asi není právě tento případ.

Zajímá mě tedy, co v tomto konkrétním případě představují „template“, „posts“, „database“, „table“, atd. Tedy zda jde o instanční proměnnou, metodu, jakousi formu reference na parametr… jak říkám, mate mě tam to vícenásobné použití ->.

Pokud mi někdo napíšete nebo vysvětlí co je co, hodně mi tím pomůžete.

Oli
Člen | 1215
+
0
-

Jedná se o tak zvaný fluent zápis a je to vlstně strasně jednoduchý.

$this->database->table('posts');

Tohle ti vrátí celou tabulku posts

->order('created_at DESC')

Seřadí podle create_at podle abecedy od Z

->limit(5);

Ořízne na 5 záznamů.

Celej ten dotaz se provede jen jednou, takže to skládání můžeš provádět na víc místech a až ty data budou fakt potřeba, tak se to teprve vytáhne.

Pro víc informací ohledně databází se podivej do dokumentace

Šaman
Člen | 2635
+
0
-

Nette je objektový framework, začni tedy asi nejprve studiem OOP.
První šipky jsou normální odkaz na property, nebo metodu objektu. Od table dál je to řetězení metod.

sb
Člen | 2
+
0
-

Díky oběma za reakce a za užitečné odkazy.

Nějak jsem přehlédl (asi už jsem ospalej :-) ), že pravá strana výrazu od table dále je ono řetězení metod.

V tuto chvíli tedy nerozumím už jen levé straně výrazu, resp. mě tam mate to dvojí použití operátoru „->“. Při samostudiu OOP v PHP (ano, dělám na tom již nějaký čas) jsem na toto zatím nikdy nenarazil, proto jsem se ptám zde.

A ještě jednou díky za ochotu.

EDIT: Korekce slovosledu a pravopisu.

Editoval sb (22. 4. 2014 23:51)

David Matějka
Moderator | 6445
+
0
-

je to stejne jako

$template = $this->template;
$template->posts = $this->database->....;

tedy, na tomto objektu ($this) ziskej property template – ta vrati instanci (objekt) nejake tridy (Nette\Templating\Template) a do property posts v tom objektu template prirad hodnotu, ktera je napravo od rovna se

Šaman
Člen | 2635
+
0
-

Pokud šipkovým operátorem získáš objekt, můžeš nad ním dál provádět stejný zápis.

$book->author->address->street

Pokud street bude už obyčejná textová property, tak už s tím dál nic dělat nemohu, ale pokud by to byl objekt, mohu nad tím dál třeba volat jeho metody a property, dejme tomu ->showMap();

Majkl578
Moderator | 1364
+
0
-

Nesouvisí s Nette.