Jak začít s nette frameworkem

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

Dobrý den.
Předem říkám, že jsem prošel celý QuickStart a už i něco dokáži napsat. Do teď jsem ovšem nepochopil jak funguje takové jednoduché přihlášení do administrace systému. Respektive nějaký admin modul. Klasicky je úvodní stránka v adresáři Homepage, dejme tomu, že tam vytvořím stránku pro přihlašování do administrace, ale jak pak vytvořím samostatnou stránku s administraci?

U známého jsem viděl nějaký trik, že se první vstoupí do složky sign/in.latte, ale jak toho docílit to netuším. Možná přes .htaccess nebo nějakým jiným způsobem, ale jakým to netuším. V klasickém php by v tomto problém nebyl, ale chci psát ve nette frameworku kvůli bezpečnosti apod.

Byly by jste tedy tak laskavý, a napsali jak na to?

Editoval Sveet (23. 8. 2014 16:47)

trejjam
Backer | 65
+
0
-

Pokud jsi ještě nestihl, prošel bych: Přihlašování & oprávnění uživatelů

Stránku s administrací vytvoříš jako další presenter např „AdministracePresenter.php“ (ve složce presenters), k ní složku v templates „Administrace“ a v ní soubory *.latte (např výchozí default pro přihlášení, dashboard, atp.).

V presenteru fci renderDefault() {} a další rendery pro další akce, v kterých na začátku kontroluješ zda je uživatel skutečně přihlášen:

	function renderDashboard() {
		$user = $this->getUser();
		if (!$user->isLogged()) {
			$this->redirect("Administrace:default");
		}

		...
	}
hitzoR
Člen | 51
+
0
-

Pokud chceš za frontendem nějakou robustní administraci s více funkcema, tak určitě doporučuju využít moduly. Tuším že někde v dokumentaci je o tom něco málo sepsáno. Jednoduše si v „app“ uděláš složky „FrontModule“ a „AdminModule“, ve kterých pak budou klasicky presentery, templaty, případně modely tak, jak to je teď v „app“. V modulech se dají dělat další podmoduly, ale to nejspíš nebudeš potřebovat. V routování se pak používají routy ve tvaru „Module:Presenter:action“.

Pro administraci si vytvoř nějaký BasePresenter, od kterého budou ostatní presentery dědit a v něm si do startup metody udělej jednoduchou kontrolu, jestli je uživatel přihlášený. Pokud není, tak ho to hodí na login stránku (pro kterou budeš mít buď ve startup metodě výjímku (viz. níž), nebo nebude od toho BasePresenteru dědit).

Ten BasePresenter by mohl vypadat zhruba takhle:

namespace App\AdminModule\Presenters;

class BasePresenter extends Nette\Application\UI\Presenter
{
    public function startup()
    {
        if (!$this->getUser()->isLoggedIn() && $this->getName()!="Admin:Login") {
            $this->redirect(':Admin:Login:default');
            // možná by stačilo pouze "Login:default", teď si tím nejsem ale úplně jistý, každopádně když to napíšeš takhle absolutně, tak nic nezkazíš
            // presenter pro přihlašování by se jmenoval LoginPresenter
        }
    }
}