Víc prvků v URL, alias nejen jeden Modul, vnořené Moduly?

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

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)

F.Vesely
Člen | 369
+
+1
-

O konstrukci url se stara Router. Chces mit jinou url, tak zmen Router, rozhodne kvuli tomu nevytvarej Moduly v Modulech.