Úplné začátky s nette, správné pochopení programování v nette
- Tirus91
- Člen | 199
Vím že toho tu je hodně, ale již jsem v koncích.
Celou neděli jsem strávil nad tím, jak vůbec do nette dostat funkčně dibi.
Nikdy jsem to nenašel. Všude jsou návody na starší verzi, ovšem nyní,
jsem to rozjel a doufám že dobře.
Využívám verze 2.1.x (v sobotu staženo)
do config.local.neon jsem přidal
dibi:
host: localhost
username: login
password: xxx
database: db
lazy: TRUE
a následně do složky /vendor/other jsem nahrál celé dibi
následně mi stačilo do konstruktoru presenteru přidat jako vstupní
parametr \DibiConnection $database a bylo vše funkční.
Zde bych prosil o kontrolu popř. co jsem udělal zbytečně či špatně.
Tak, toto mi už krásně jede a vypisuji články, mažu, edituji a to samé
s tématy. (zde bych prosil o přesnější radu jak to udělat správně
z pohledu MVC abych v presenteru neměl SQL commandy – udělat model? nebo
si napsat knihovnu pro práci s DB obsluhující články? – přijde mi to
trochu zbytečné, jelikož by to byly metody zaobalující jen commandy [popř.
jak tam dostanu connect?])
No a přišlo mi ejhle. Jak na přihlašování, registraci apod. vůči DB?
Návod jsem bohužel již nenašel a ne a ne do toho proniknout.
Možná asi nechápu vůbec jak správně v nette programovat :( Budu moc rád, kdyby mi toto vše někdo osvětlil.
Moc děkuji předem a doufám, že se nějaký dobrák najde
- Tirus91
- Člen | 199
Tak jsem si zatím sám na něco odpověděl.
Abych pravdu řekl, tak topic https://forum.nette.org/…senterom-atd
mi řekl víc než celý quickstart.
Pochopil jsem k čemu přesněji jsou modely (model mi obstará komunikaci s DB a následně výsledky či data navrátí skrze return do presenteru). Dále jsem pochopil jak daný modul zaregistrovat jako službu a skrze injection at skrze komentář nebo do konstruktoru dostat nějaké info
do modelů vždy dostávat služby a connect skrze konstruktor a do presenterů klidně skrze koment (zda si pamatuji dobře.)
Tak tudíž, tímto se dá říct, že je první problém vyřešen.
Jak tedy na tu službu pro přihlašování? Opět třídu, pro User management
mám dát jako model?
- BigCharlie
- Člen | 283
do config.local.neon jsem přidal
to jsi přidal správně
a následně do složky /vendor/other jsem nahrál celé dibi
Zní to, jakože ručně. Nejjednodušší je to asi přes composer, stejně jako samotné nette. Podrobnosti si dohledej. Pokud jsi to dělal přes composer, tím líp.
následně mi stačilo do konstruktoru presenteru přidat jako vstupní parametr \DibiConnection $database a bylo vše funkční.
konstruktor presenteru není dobrá volba. Doporučovaný postup vypadá v presenteru třeba takto:
/** @var \DibiConnection @inject **/
public $database;
Tak, toto mi už krásně jede a vypisuji články, mažu, edituji a to samé s tématy. (zde bych prosil o přesnější radu jak to udělat správně z pohledu MVC abych v presenteru neměl SQL commandy – udělat model? nebo si napsat knihovnu pro práci s DB obsluhující články? – přijde mi to trochu zbytečné, jelikož by to byly metody zaobalující jen commandy [popř. jak tam dostanu connect?])
Nikdo tě nenutí vyčlenit to do modelu.
Co získáš tím, že to uděláš? Pokud budeš tu aplikaci spravovat či rozvíjet, bývá jednodušší všechny činnosti (business logiku aplikace) rozdělit do jednotlivých tříd. Nějaká třída (jedna nebo víc) pro práci s články, nějaká pro práci s uživatelem (jedna nebo víc). Proč to „jedna nebo víc“? Liší se to podle zvyklostí a znalostí programátora, složitosti aplikace atd.
Proč jednodušší? Předpokládám, že ty jednotlivé třídy asi budou o něco kratší, snad přehlednější. A ideálně budou splňovat spoustu dalších věcí – teorii si dohledej.
Řekněme, že tedy máš nějakou superprimitivní třídu pro práci
s články. Ta si v konstruktoru (ano, u modelu je to obvykle správná
volba) vyžádá DibiConnection
:
class Articles {
/** @var \DibiConnection **/
private $database;
public function __construct(\DibiConnection $db) {
$this->database = $db;
}
public function findArticle($id) {
return $this->database->query('sql')->fetch();
}
}
Tuhle třídu potřebuješ dostat do presenteru. Jak? Stejně jako jsme tam dostali dibi. Takže config.neon:
services:
- Articles
a v presenteru třeba
/** @var \Articles @inject **/
public $articles;
DI container v Nette už zařídí, že dostaneš, co potřebuješ.
No a přišlo mi ejhle. Jak na přihlašování, registraci apod. vůči DB? Návod jsem bohužel již nenašel a ne a ne do toho proniknout.
Viz výše. V zásadě se to opakuje stále dokola. Takže třída(y) pro přihlášování, šup s ní do config.neon, vyžádat (injektnout/vstříknout, jak je libo) v presenteru, použít.
Zkus pročíst dokumentaci, projít quickstart. Když u toho budeš přemýšlet, dost věcí ti začne zapadat do sebe.
Všehno píšu z hlavy, takže jsou tam možná chyby. Třeba mě někdo doplní či opraví. Navíc všechno by mělo být k nalezení v dokumentaci, příkladech v nette či zde na fóru.
- Mysteria
- Člen | 797
Pokud chceš využívat to, co ti Nette nabízí, tak ano. Mrrni se sem, jak se s tím pracuje: https://doc.nette.org/…thentication#…
Editoval Mysteria (25. 2. 2014 0:01)
- David Matějka
- Moderator | 6445
pokud chces, aby se ti tato trida starala o autentifikaci, tak ano. + musi
implementovat rozhrani Nette\Security\IAuthenticator
(viz UserManager
v sandboxu)
edit: tesne :))
Editoval matej21 (25. 2. 2014 0:01)
- David Matějka
- Moderator | 6445
@Tirus91: $this->getUser()
vraci objekt typu Nette\Security\User,
UserManager si budes muset injectnout. Nette\Security\User
spolupracuje s tvym UserManager
-em prave pouze pri autentizaci,
jelikoz vidi, ze to implementuje Nette\Security\IAuthenticator