praca s modelom pri prihlasovani
- stewe
- Člen | 20
Zdravim,
v Nette som zelenac. „Problem“ som vyriesil, ale neviem, ci to robim principialne spravne a ci dobre dodrziavam MVC(P) architekturu. Takze, mam SignUpPresenter ktory sluzi na registraciu uzivatelov. Po odoslani formulara sa zavola metoda signUpFormSubmitted($form) v tomto presenteri, ktora zisti, ci uzivatel, ktoreho ideme registrovat uz v systeme neexistuje a podobne. Zatial vsetko ok. Vsetko funguje, pridanie do databazy a podobne. Lenze doteraz som mal pridavanie uzivatela do databazy priamo v tej funkcii, no ked sa nad tym zamyslim, tak presne toto je uloha pre model.
Tak som si spravil prototyp modelu SignUpModel v models/ , dedil som od
Nette\Object a potom v tej funkcii signUpFormSubmitted() vytvorim objekt
$SignUp = new SignUpModel(); a nasledne zavolam nieco ako
$SignUp->register($submittedValues), kde v submittedValues su udaje
o userovi pri registracii a tato metoda vrati true / false podla toho ci sa
podarilo usera zaregistrovat.
Takze otazka, robim to principialne spravne?
Este podotknem, ze som si musel v config.neon zadefinovat ten „service“, tak ako som to mal uz zo vzoroveho prikladu, takto nejako:
signupmodel:
factory: [@model, createSignUpService]
potom som este pripisal metodu createSignUpService() do Model-u
<?php
class Model extends Nette\Object {
/** @var Nette\Database\Connection */
public $database;
public function __construct(Nette\Database\Connection $database) {
$this->database = $database;
}
public function createAuthenticatorService() {
return new Authenticator($this->database->table('users'));
}
public function createSignUpService() {
return new SignUpModel();
}
}
?>
Je to ok? Ide mi najma o to, ze ak filozofiou presentera je robit medzivrstvu medzi modelom a view, tak potom by sa mala „datova“ logika preniest do Modelu, kde ukladam do databazy a podobne.
Cital som viac clankov ohladom tohoto a niekto radi robit tu aplikacnu logiku aj s queries na db rovno v presenteri a nezatazovat s tym model este, ale podla mna je tento moj sposob celkom validny nie? :)
Editoval stewe (3. 7. 2011 16:31)
- tomolas
- Člen | 66
Nazdar,
chápeš to podľa mňa úplne správne.
Dobrý príklad, ktorý ti môže byť vodítkom je v sandboxe(kedysi
skeleton). Nájdeš to medzi stiahnutými súbormi, keď si siahneš Nette.
Rieši sa tam síce prihlásenie, ale s registráciou je to vlastne veľmi
podobné (to rozdelenie úloh).
Mrkni si model/UsersModel.php, presenters/SignPresenter.php .. a tak.
Good luck!