Víc prvků v URL, alias nejen jeden Modul, vnořené Moduly?
- theacastus
- Člen | 81
Ahoj,
uvažuju nad tím jak si uspořádat stromovou strukturu nejen adresářů, ale i presenterů, modulů a všeho v URL.
V tuhle chvíli mám toto:
app/
AdminModule/
presenters/
templates/
@layout.latte
FrontModule/
presenters/
templates/
@layout.latte
model/
config/
forms/
router/
A přemýšlím jak to více „hladit“ z mého pohledu. Alias, nelíbí
se mi úplně v URL mít blog jako
/blog/view/<page> a /post/view/<id>
chtěl bych spíš /blog/page/<page> a /blog/post/<id>, což se sice dá vyřešit modulem, ale v nechci mít standalone modul pro každý kousek webu a nebaví mě stále překopírovávat @layout.latte v momentě kdy něco změním…
Vygooglil jsem někde vnořené moduly tu na fóru, ale to bylo pár let staré vlákno… a krom toho nevím zda to nette stále umí.
Plus kdyby šlo „dědit, vkládat(inherit)“ nějak layout mezi moduly. Možná by to šlo setnout v startup(), ale nevím zda jsou přístupné pro presenter v jednoum modulu layouty v jiném modulu.
Takže mé skromné přání je aby struktura složek mohla vypadat takto:
app/
AdminBundle/
DashboardModule/
presenters/
templates/
@layout.latte
ManagerModule/ //usernamanger apod...
presenters/
templates/
@layout.latte
BlogModule/
presenters/
templates/
@layout.latte
FrontBundle/
DefaultModule/
presenters/
templates/
@layout.latte
AccountModule/ //settings, profile apod...
presenters/
templates/
@layout.latte
BlogModule/
presenters/
templates/
@layout.latte
config/
router/
forms/
model/
Je možné to nějak vymyslet ?
Napadlo mě to „na tvrdo“ nacpat do RouterFactory.php nějak takhle:
<?php
namespace App;
use Nette;
use Nette\Application\Routers\RouteList;
use Nette\Application\Routers\Route;
class RouterFactory {
/**
* @return Nette\Application\IRouter
*/
public static function createRouter(){
$router = new RouteList();
$router[] = new Route('index.php', 'Front:Default:Homepage:default', Route::ONE_WAY);
$router[] = new Route('[<lang [a-z]]{2}>/<bundle>/<module>/<presenter>/<action>[/<id>-<slug>]', [
'lang' => 'en',
'bundle' => 'Front',
'Module' => 'Default',
'presenter' => 'Homepage',
'action' => 'default',
'id' => NULL,
'slug' => NULL
]);
}
}
Vím že si tím komplikuju celé ACL, ale tak to se dá vyřešit i jinak.
Nebo to je nepochopení Nette a můžu se jít s tímhle nápadem bodnout ? :D
Editoval theacastus (10. 2. 2017 11:48)