Rozdělení presenterů do více složek

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

Zdravím,

jsem v Nette úplně nový a nejspíš tu již odpověď na mou otázku bude, ale to, co jsem našel, mi moc nepomohlo.

Chtěl bych si aplikaci rozdělit na soukromou a veřejnou část. Vytvořil jsem si tedy následující adresářovou strukturu:

  • presenters/Back/
  • presenters/Front/
  • presenters/Front/BasePresenter.php
  • presenters/Front/HomepagePresenter.php
  • templates/Back/
  • templates/Front/Homepage/
  • templates/Front/Homepage/default.latte

Nedaří se mi však nastavit routování tak, aby správně posílalo požadavky na potřebné presentery a k tomu odpovídající templates. Zkouším nejdřív úplně jednoduše přesměrovat stránku www.mojestranka.l na presenter Front:Homepage:default. Viz bootstrap.php:

<?php
...
$container->router[] = new Route('index.php', 'Front:Homepage:default', Route::ONE_WAY);
...
?>

To mi však hlásí:

„Page not found. Missing template ‚…\app\presenters\templates\Homepage\default.latte‘.“

Poradí někdo?

James_Scott
Člen | 55
+
0
-

Podle všeho se routa provede správně(dole v panelu by jsi měl mít routu označenou zeleně), ale chybová hláška Ti jasně ukazuje, že nemůže najít šablonu default pro presenter Homepage.

Spíš bych ale upravil strukturu na:

  • Front/presenters/HomepagePresenter
  • Back/presenters/HomepagePresenter

Podle toho pak i šablony:

  • Front/templates/Homepage/default.latte
  • Back/templates/Homepage/default.latte

Presentery a modely by jsi měl (nevím jestli to je povinnost) také zařadit do odpovídajícího namespace.

Editoval James_Scott (2. 11. 2013 0:13)

HappyFace
Člen | 162
+
0
-

James_Scott napsal(a):
Presentery a modely by jsi měl (nevím jestli to je povinnost) také zařadit do odpovídajícího namespace.

Nie ze by mal ale musi ich zabalit do NAMESPACE! minimalne jeden z nych lebo ak bude mat nieco ako:

Back/presenter/IndexPresenter a Front/presenter/IndexPresenter a to urcite bude mat tak NETTE ti bude hlasit, ze mas duplikatne classy.

MikeLacroix
Člen | 60
+
0
-

Super díky moc! Ještě jeden dotaz: Jak dám aplikaci vedět, kde má daný presenter/template hledat? Jestli ve složce Front nebo Back?

HappyFace
Člen | 162
+
0
-

MikeLacroix napsal(a):

Super díky moc! Ještě jeden dotaz: Jak dám aplikaci vedět, kde má daný presenter/template hledat? Jestli ve složce Front nebo Back?

to si hlada automaticky podla umiestnenia presenteru

+back:
->+presenter
->-> HomepagePresenter.php
->+template
->-> +Homepage -> index.latte
->-> @layout.latte

+front:
->+presenter
->-> FrontpagePresenter.php
->+template
->-> @layout.latte
->-> +Frontpage -> index.latte

Editoval HappyFace (2. 11. 2013 12:28)

MikeLacroix
Člen | 60
+
0
-

Nemůžu si pomoct, pořád mi to neběží. Můj současný stav:

Back/presenters/HomepagePresenter.php

namespace Back;

class HomepagePresenter extends Nette\Application\UI\Presenter {
	public function renderDefault()	{
		$this->template->foo = 'back';
	}
}

Back/templates/Homepage/default.latte

{$foo}

Front/presenters/HomepagePresenter.php

namespace Front;

class HomepagePresenter extends Nette\Application\UI\Presenter {
	public function renderDefault()	{
		$this->template->foo = 'front';
	}
}

Front/templates/Homepage/default.latte

{$foo}

Routy:

$container->router[] = new Route('/admin/<presenter>/<action>[/<id>]', 'Back:Homepage:default');
$container->router[] = new Route('<presenter>/<action>[/<id>]', 'Front:Homepage:default');

Chyba:
Cannot load presenter ‚Homepage‘, class ‚HomepagePresenter‘ was not found in ‚..... app/presenters/HomepagePresenter.php‘.

James_Scott
Člen | 55
+
0
-

Mrkni se do dokumentace – zde a zde

Název složky i namespace by se měl jmenovat FrontModule a BackModule.
Pak bych upravil routu na:

$container->router[] = new Route('<module>/<presenter>/<action>[/<id>]', 'Back:Homepage:default');