Ako napísať routu s použitím transformací

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

Zdravím,

snažím sa prepísať moju routu do krajšieho tvaru s použitím https://doc.nette.org/…tion/routing#… a však nejako mi to vôbec nefunguje.

Toto je moja routa ak by ma niekto mohol nakopnúť správny smerom bol by som mu vďačný.

<?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[] = $aRouter = new RouteList('Admin');
		$aRouter[] = new Route('admin/<presenter>/<action>[/<id>]', 'Homepage:default');

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

        /*Profil*/
        $fRouter[] = new Route('profil/nastavenia/<id>', 'Profile:edit');
        $fRouter[] = new Route('profil/<name>', 'Profile:default');

        /*Forum*/
        $fRouter[] = new Route('forum/<slug>', 'Forum:topic');
        $fRouter[] = new Route('forum/detail/<slug>', 'Forum:detail');

        /*Partners*/
        $fRouter[] = new Route('partnery', 'Partners:default');

        /*Servers*/
        $fRouter[] = new Route('servery', 'Servers:default');

        /*Login*/
        $fRouter[] = new Route('prihlasenie', 'Login:default');

        /*Registration*/
        $fRouter[] = new Route('registracia', 'Registration:default');

        /*News*/
        $fRouter[] = new Route('novinky/<id>', 'News:default');
        $fRouter[] = new Route('novinky/archiv', 'News:archive');

        /*Modul*/
        $fRouter[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');

		return $router;
	}

}

Editoval iGavrilo (21. 3. 2016 18:53)

Matey
Člen | 142
+
0
-

@iGavrilo asi by si mal upresniť otázku :) napr. čo ti natom nefunguje/akú chybu dostávaš alebo o čo sa vlastne snažíš.

Z toho čo si ukázal tu vidím plne funkčný router.

Attanon
Člen | 25
+
0
-

@iGavrilo myslíš takhle?

Místo tohohle

/*Partners*/
$fRouter[] = new Route('partnery', 'Partners:default');

/*Servers*/
$fRouter[] = new Route('servery', 'Servers:default');

/*Login*/
$fRouter[] = new Route('prihlasenie', 'Login:default');

/*Registration*/
$fRouter[] = new Route('registracia', 'Registration:default');

/*Modul*/
$fRouter[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');

tam šoupnout tohle

$route = new Route('<presenter>/<action>[/<id>]', array(
    'presenter' => array(
        Route::VALUE => 'Homepage',
        Route::FILTER_TABLE => array(
            // řetězec v URL => presenter
            'partnery' => 'Partners',
            'servery' => 'Servers',
            'prihlasenie' => 'Login',
			'registracia' => 'Registration',
        ),
    ),
    'action' => 'default',
	'id'     => NULL,
));
iGavrilo
Člen | 32
+
0
-

@Attanon

nefunguje

<?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[] = $aRouter = new RouteList('Admin');
		$aRouter[] = new Route('admin/<presenter>/<action>[/<id>]', 'Homepage:default');

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

        $fRoute = new Route('<presenter>/<action>[/<id>]', array(
            'presenter' => array(
                Route::VALUE => 'Homepage',
                Route::FILTER_TABLE => array(
                    // řetězec v URL => presenter
                    'partnery' => 'Partners',
                    'servery' => 'Servers',
                    'prihlasenie' => 'Login',
                    'registracia' => 'Registration',
                ),
            ),
            'action' => 'default',
            'id'     => NULL,
        ));

		return $router;
	}

}

Editoval iGavrilo (24. 3. 2016 21:39)

Oli
Člen | 1215
+
0
-

Nefunguje. Co to je nefunguje? Co to znamená? Zejména, jaký URL od toho očekáváš, že to bude generovat? To co ti psal @Attanon je to co jsi měl v kodu ty, jen napsaný rozumněji…

iGavrilo
Člen | 32
+
0
-

@Oli Veď práve ale nešla mi ani jedna z tých url … Dokonca ani Homepage hodilo error ako ked nevie nájsť routu

Oli
Člen | 1215
+
+3
-

Chlape, chlape, ty snad ani poradit nechces ;)

Neco nejde znamena, ze se to nejak chova a nejak se to ma chovat. Jak se to ma chovat? Co mas v neonu pod presenter mapping? Jakej namespace ma tvuj HomepagePresenter? A v neposledni rade je hezke, ze jsi psal, ze to hazi chybu. Myslis, ale ze pozname co ta chyba rika z toho co jsi napsal? :)

Btw. jakou mas adresarovou strukturu?

S temahle informacema by se uz dalo neco delat.

Attanon
Člen | 25
+
0
-

@iGavrilo Ani homepage ti fungovat nemůže, protože tam máš špatně název proměnné. Ten front router list máš jako $fRouter a tu routu potom deklaruješ do proměnné $fRoute.

Hlavně já ti psal za co to máš nahradit. A ty jsi to nahradil za celé, což s tím co jsem ti já napsal nelze.

Já to myslel takhle nahradit. A napsal jsem ti jen tenhle kopanec. Ale když na to tak koukám, tak bych to radši ani už nezkracoval, protože bys pak pravděpodobně nedocílil toho, že ti budou fungovat povinné parametry například u toho profilu.

	public static function createRouter() {

		$router = new RouteList();

		$router[] = $aRouter = new RouteList('Admin');
		$aRouter[] = new Route('admin/<presenter>/<action>[/<id>]', 'Homepage:default');

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

		/*Profil*/
		$fRouter[] = new Route('profil/nastavenia/<id>', 'Profile:edit');
		$fRouter[] = new Route('profil/<name>', 'Profile:default');

		/*Forum*/
		$fRouter[] = new Route('forum/<slug>', 'Forum:topic');
		$fRouter[] = new Route('forum/detail/<slug>', 'Forum:detail');

		/*News*/
		$fRouter[] = new Route('novinky/<id>', 'News:default');
		$fRouter[] = new Route('novinky/archiv', 'News:archive');

		$fRouter[] = new Route('<presenter>/<action>[/<id>]', array(
			'presenter' => array(
				Route::VALUE => 'Homepage',
				Route::FILTER_TABLE => array(
					// řetězec v URL => presenter
					'partnery' => 'Partners',
					'servery' => 'Servers',
					'prihlasenie' => 'Login',
					'registracia' => 'Registration',
				),
			),
			'action' => 'default',
			'id'     => NULL,
		));

		return $router;
	}