Rozdělení aplikace do modulů

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

Zdravím všechny, už asi 3 hodiny řeším, jak rozdělit aplikaci do modulů, jde mi o to mít oddělenou část co je dostupná normálně na webu a administrace (každé svojí šablony, své presentery). Hledal jsem snad všechny možné diskuse a návody ale nic, takže zkusím popsat co mám hotovo a co mi to hlásí.

Ve složce App mám dvě podsložky (FrontModule a BackModule), každá z nich obsahuje složku presenters, která obsahuje složku templates a HomepagePresenter.php.

V neonu mám:

application:
	errorPresenter: Error
	mapping:
		*: App\*Module\Presenters\*Presenter

V Homepage presenteru ve složce App\FrontModule\Presenter\HomepagePresenter.php mám:

<?php

namespace FrontModule;

use App\Presenters\BasePresenter as Presenter;


class HomepagePresenter extends Presenter
{

	public function renderDefault()
	{
		$this->template->anyVariable = 'any value';
	}

Routování je:

public static function createRouter() {
        $router = new RouteList();
        $router[] = $admin = new RouteList('Back');
        $admin[] = new Route('admin/<presenter>/<action>[/<id>]', 'Homepage:default');

        $router[] = $front = new RouteList('Front');
        $front[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');

        return $router;
    }

routování mám pocit že funguje, protože když místo localhost/www dám /www/admin tak to místo chyby: Cannot load presenter ‚Front:Homepage‘, class ‚App\FrontModule\Presenters\HomepagePresenter‘ was not found.
Hodí tu samou jen na Back
Hlásí že třída App\FrontModule\Presenters\HomepagePresenter nebyla nalezena, nicméně soubor přesně v tomto adresáři je :/ viz popis výš, kde jsem udělal chybu?

Editoval Webster.K (11. 1. 2017 10:43)

David Matějka
Moderator | 6445
+
0
-

mas spatne namespace u toho HomepagePresenter-u

Webster.K
Člen | 212
+
0
-

Aha, a co tam tedy má být správně? Vycházel jsem z: https://doc.nette.org/…n/presenters

David Matějka
Moderator | 6445
+
0
-

Ma to byt dle toho nastaveneho mapovani, viz doc .. v te chybove hlasce to mas dokonce napsane

Webster.K
Člen | 212
+
0
-

Zkoušel jsem místo toho dát, App\FrontModule\Presenters\HomepagePresenter, App\FrontModule, jen FrontModule a dalších X kombinací, mapování mám základní:

*: App\*Module\Presenters\*Presenter

takže by to podle mě mělo všechno směrovat do složky App\CokolivModule\Presenters\CokolivPresenter, což bych řekl že mám splněno, ale s tím namespace si rady tedy opravdu nevím, protože jsem vyzkoušel snad všechny možné kombinace a v té chybové hlášce nevidím, kde to je napsáno…

Editoval Webster.K (11. 1. 2017 11:14)

CZechBoY
Člen | 3608
+
0
-

Na složce vůbec nezávisí, ale je dobrým zvykem mít stejný namespace jako zařazený v adresářové struktuře (s výjimkou root složky, kde může být třeba app, src, název firmy/projektu, …).

tzn. v tom presenteru nastav namespace App\CokolivModule\Presenters a třídu pojmenuj CokolivPresenter.

Webster.K
Člen | 212
+
+1
-

Tohle jsem zkoušel :/ nicméně stejná chyba

Edit: Tak už to jde, zapomněl jsem promazat cache :/ Děkuji :)

Editoval Webster.K (11. 1. 2017 11:35)