Rozšíření stávajícího routelistu v případě nahrání nového modulu

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

Nyní mám následující routerfactory

namespace App;

use Nette,
    Nette\Application\Routers\RouteList,
    Nette\Application\Routers\Route,
    Nette\Application\Routers\SimpleRouter;

/**
 * Router factory.
 */
class RouterFactory {

    /**
     * @return \Nette\Application\IRouter
     */
    public function createRouter() {
        $router = new RouteList();
        $router[] = $adminModule = new RouteList('Admin');

        $adminModule[] = new Route('Admin/<presenter>/<action>/<id>[-<uri>]', array(
            'presenter' => 'Homepage',
            'action' => 'default',
            'id' => NULL,
        ));

        $router[] = $frontModule = new RouteList('Front');

        $frontModule[] = new Route('<presenter>/<action>/<id>[/<title>]', array(
            'presenter' => 'Homepage',
            'action' => 'default',
            'id' => NULL,
        ));

        $frontModule[] = new Route('index.php', 'Front:Default:default', Route::ONE_WAY);
        return $router;
    }

}

v config.neon mám toto

services:
    userManager: App\Model\UserManager
    - App\RouterFactory
    router: @App\RouterFactory::createRouter

O co mi jde?
Jakmile do složky app nakopíruji nějaký modul, tak ten by měl mít svůj router a svůj konfig.
Router by se měl doplnit ke stávající routě (spíše před stávající se dá ten z modulů).

Jak toto mohu docílit?

Tirus91
Člen | 199
+
0
-

Napadlo mne něco jako, v tom routeru volat něco jako

$router = \Tirus\EurobasketModule\Router::createRoutes($router);

Nedá se nějak získat seznam tříd, dle nějakého filteru? Například všechny objekty co implementují jedno rozhraní.

Tirus91
Člen | 199
+
0
-

Nakonec jsem to udělal nějak takto, ale řešení je to prasácké.

Do routeru jsem si dal

$list = glob(__DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '*Module');
        foreach ($list as $modul) {
            if (class_exists('\\Tirus\\' . basename($modul) . '\\Router')) {
                eval('$router = \\Tirus\\' . basename($modul) . '\\Router::createRoutes($router);');
            }
        }
Jiří Nápravník
Člen | 710
+
+1
-

Mrkni na Flame\Modules . Modul uděláš jako extension, pak to stačí jen nakopírovat a přidat do extensions v neonu, routy apod. se pak automaticky zaregistruji