Více modulů v sobě a jejich routování

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

Jak mám napsat routu aby mi brala něco podobného?

/ - app
/ --- AdminModule
/ ------ArticleModule
/ --- ArticleModule
/ --- FrontModule
....

Momentálně mám

$router[] = new Route('Admin/<presenter>/<action>/<id>', array(
            'module' => 'Admin',
            'presenter' => 'Default',
            'action' => 'default',
            'id' => NULL,
        ));

ale nevím jak pro ten ArticleModul …
Chtěl bych právě dát ArticleModul 2× (jednou pro administraci a jednou pro usery)

Chtěl bych tedy docílit něčho jako
/admin/article → směřuje do AdminModule/ArticleModule
/article → směřuje do ArticleModule

Editoval Tirus91 (4. 3. 2014 21:36)

David Matějka
Moderator | 6445
+
0
-

asi takhle:

$router[] = $adminRoutes = new RouteList("Admin");
$adminRoutes[] = new Route("Admin/<presenter>/<action>[/<id>]", "Default:default");
Tirus91
Člen | 199
+
0
-

matej21 napsal(a):

asi takhle:

$router[] = $adminRoutes = new RouteList("Admin");
$adminRoutes[] = new Route("Admin/<presenter>/<action>[/<id>]", "Default:default");

Myslíš tedy takto?

$router[] = $mainRouter = new RouteList();
$mainRouter[] = new Route('index.php', 'Front:Default:default', Route::ONE_WAY);
$mainRouter[] = new Route('Article/<presenter>/<action>/<id>[-<title>]', array(
    'module' => 'Article',
    'presenter' => 'Topic',
    'action' => 'default',
    'id' => NULL,
));
$mainRouter[] = new Route('<presenter>/<action>/<id>[-<title>]', array(
    'module' => 'Front',
    'presenter' => 'Default',
    'action' => 'default',
    'id' => NULL,
));
$router[] = $adminRouter = new RouteList('Admin');

$adminRouter[] = new Route('Admin/Article/<presenter>/<action>/<id>', array(
    'module' => 'Article',
    'presenter' => 'Default',
    'action' => 'default',
    'id' => NULL,
));

to mi vyhodí

Unable to create service 'router', value returned by factory is not Nette\Application\IRouter type

Editoval Tirus91 (4. 3. 2014 21:44)

David Matějka
Moderator | 6445
+
0
-

a vracit $router? obsahuje $router RouteList?

Tirus91
Člen | 199
+
0
-

matej21 napsal(a):

a vracit $router? obsahuje $router RouteList?

Když jsem zkusil to co si mi poradil, tak to nemůže obsahovat routelist přeci ;), ale obsahuje to pole těchto listů…
no lezl jsem po googlu a našel jsem něco takovéhleho

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


        $router[] = new Route('Admin/Article/<presenter>/<action>/<id>', array(
            'module' => 'Admin',
            'submodule' => 'Article',
            'presenter' => 'Default',
            'action' => 'default',
            'id' => NULL,
        ));
        $router[] = new Route('Admin/<presenter>/<action>/<id>', array(
            'module' => 'Admin',
            'presenter' => 'Default',
            'action' => 'default',
            'id' => NULL,
        ));

Jenže teď ten /Admin/Article mne stále odkazuje přímo do /AdminModule a ne do /AdminModule/ArticleModule

Editoval Tirus91 (4. 3. 2014 22:12)

David Matějka
Moderator | 6445
+
0
-

ja ti neporadil, at mazes $router = new RouteList(), ale jak ma vypadat routa, kterou nahradis tu, co si posilal v prvnim prispevku.

$router = new RouteList();
......
//normalni routy...
......
$router[] = $adminRoutes = new RouteList("Admin");
$adminRoutes[] = new Route("Admin/<presenter>/<action>[/<id>]", "Default:default");

return $router;
Tirus91
Člen | 199
+
0
-

matej21 napsal(a):

ja ti neporadil, at mazes $router = new RouteList(), ale jak ma vypadat routa, kterou nahradis tu, co si posilal v prvnim prispevku.

$router = new RouteList();
......
//normalni routy...
......
$router[] = $adminRoutes = new RouteList("Admin");
$adminRoutes[] = new Route("Admin/<presenter>/<action>[/<id>]", "Default:default");

return $router;

Tak to mám takto

$router = new RouteList();
        $router[] = new Route('index.php', 'Front:Default:default', Route::ONE_WAY);
        $router[] = new Route('Article/<presenter>/<action>/<id>[-<title>]', array(
            'module' => 'Article',
            'presenter' => 'Topic',
            'action' => 'default',
            'id' => NULL,
        ));
        $router[] = new Route('<presenter>/<action>/<id>[-<title>]', array(
            'module' => 'Front',
            'presenter' => 'Default',
            'action' => 'default',
            'id' => NULL,
        ));
        $router[] = $adminRoute = new RouteList('Admin');
        $adminRoute[] = new Route('Admin/Article/<presenter>/<action>/<id>', array(
            'module' => 'Article',
            'presenter' => 'Default',
            'action' => 'default',
            'id' => NULL,
        ));
        $adminRoute[] = new Route('Admin/<presenter>/<action>/<id>', array(
            'presenter' => 'Default',
            'action' => 'default',
            'id' => NULL,
        ));

Ale momentálně se to snaží hledat Admin Presenter ve Front modulu

Pavel Macháň
Člen | 282
+
0
-

Tirus91 napsal(a):

Tak to mám takto

$router = new RouteList();
        $router[] = new Route('index.php', 'Front:Default:default', Route::ONE_WAY);
        $router[] = new Route('Article/<presenter>/<action>/<id>[-<title>]', array(
            'module' => 'Article',
            'presenter' => 'Topic',
            'action' => 'default',
            'id' => NULL,
        ));
        $router[] = new Route('<presenter>/<action>/<id>[-<title>]', array(
            'module' => 'Front',
            'presenter' => 'Default',
            'action' => 'default',
            'id' => NULL,
        ));
        $router[] = $adminRoute = new RouteList('Admin');
        $adminRoute[] = new Route('Admin/Article/<presenter>/<action>/<id>', array(
            'module' => 'Article',
            'presenter' => 'Default',
            'action' => 'default',
            'id' => NULL,
        ));
        $adminRoute[] = new Route('Admin/<presenter>/<action>/<id>', array(
            'presenter' => 'Default',
            'action' => 'default',
            'id' => NULL,
        ));

Ale momentálně se to snaží hledat Admin Presenter ve Front modulu

Protože routy se hledají postupně… bere se první která vyhovuje…
V debug baru v routách máš napsaný jaká se použije (yes) a jaká ještě vyhovuje (may)

Editoval EIFEL (4. 3. 2014 22:28)

Tirus91
Člen | 199
+
0
-

EIFEL napsal(a):

Tirus91 napsal(a):

Tak to mám takto

$router = new RouteList();
        $router[] = new Route('index.php', 'Front:Default:default', Route::ONE_WAY);
        $router[] = new Route('Article/<presenter>/<action>/<id>[-<title>]', array(
            'module' => 'Article',
            'presenter' => 'Topic',
            'action' => 'default',
            'id' => NULL,
        ));
        $router[] = new Route('<presenter>/<action>/<id>[-<title>]', array(
            'module' => 'Front',
            'presenter' => 'Default',
            'action' => 'default',
            'id' => NULL,
        ));
        $router[] = $adminRoute = new RouteList('Admin');
        $adminRoute[] = new Route('Admin/Article/<presenter>/<action>/<id>', array(
            'module' => 'Article',
            'presenter' => 'Default',
            'action' => 'default',
            'id' => NULL,
        ));
        $adminRoute[] = new Route('Admin/<presenter>/<action>/<id>', array(
            'presenter' => 'Default',
            'action' => 'default',
            'id' => NULL,
        ));

Ale momentálně se to snaží hledat Admin Presenter ve Front modulu

Protože routy se hledají postupně… bere se první která vyhovuje…
V debug baru v routách máš napsaný jaká se použije (yes) a jaká ještě vyhovuje (may)

Jo, tak to je ono :) děkuji, jsem vocas :)

až na, ale to jdu študovat

Possible problem: you are sending a HTTP header while already having some data in output buffer. Try OutputDebugger or start session earlier. search►

vyřešeno,
jen otázka ještě..
když tam nyní dám odkaz

:Article:Topic

tak mi to odkazuje do

Admin:Article:Article

to je taky asi špatně, není to způsobený stejným názvem modulu a proto to pak takto blbne?

Editoval Tirus91 (4. 3. 2014 22:39)

Tirus91
Člen | 199
+
0
-

Už nevím jak, ale je to komplet vyřešeno :)

Děkuji všem zúčastněným