Rozdělení aplikace do modulů
- Webster.K
- Člen | 212
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)
- Webster.K
- Člen | 212
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
Ma to byt dle toho nastaveneho mapovani, viz doc .. v te chybove hlasce to mas dokonce napsane
- Webster.K
- Člen | 212
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
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
.