Nette 2.3 static function createRouter

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

Zdravím,

používal jsem níže uvedený kód pro hezké URL. Nyní v Nette 2.3 musí být static function createRouter a v této funkci nemohu používat $this

	public static function createRouter()
	{
		$router = new RouteList();

$router[] = new Route('/sport/<id [a-z0-9\-]+>', array(
    'presenter' => 'Sport',
    'action' => 'detail',
    'id' => array(
        Route::FILTER_IN => $this->cachedDatabaseRouterHelper->filterInSport,
        Route::FILTER_OUT => $this->cachedDatabaseRouterHelper->filterOutSport
    )
));
	}

Jak udělat hezké URL podle titulku z databáze? Jde nějak obejít aby createRouter nemusel být static?

Díky

David Grudl
Nette Core | 8218
+
+1
-

Používej to jako dosud, nic se neměnilo.

motorcb
Člen | 552
+
0
-

Zdravím,

dělám nový projekt na Nette 2.3 a nevím jak udělat aby router upravíl URL podle záznamu z DB. V sandboxu v souboru RouterFactory.php je:

public static function createRouter() tudíž v této metodě nemohou použít $this ($this->cachedDatabaseRouterHelper->filterInSport)

Když udělám projekt po staru podle Davida:

config.neon:

#router: App\RouterFactory::createRouter#tento radek zakomentuju a nahradim:
router: @App\RouterFactory::createRouter

nyní public function createRouter() nemusí být static a mohu v ní použít $this
Ovšem dostávám chybu z laděnky:

Nette\DI\ServiceCreationException
Service ‚routing.router‘: Reference to missing service of type App\RouterFactory.

Tak jak na to?

Editoval motorcb (29. 3. 2015 20:52)

bazo
Člen | 620
+
0
-

si tu router factory predsa zaregistruj ako sluzbu

motorcb
Člen | 552
+
0
-

@bazo

registruju si ji jako službu:

services:
    router: @App\RouterFactory::createRouter
Quinix
Člen | 108
+
0
-

@motorcb tvůj zápis registruje že službu „router“ vrácí metoda createRouter služby App\RouterFactory. Musíš ještě přidat samotnou router create:

services:
	- App\RouterFactory
	router: @App\RouterFactory::createRouter

Editoval Quinix (29. 3. 2015 22:43)

lukinox
Člen | 3
+
0
-

Zdravím,

postupoval jsem úplně stejně, jako je v komentářích výše, mám upravený config.neon i RouterFactory.php. Na localhostu mi to funguje, ale nahraju to na server a Nette hlásí chybu Using $this when not in object context. Temp adresář je vymazaný (několikrát). Nevíte někdo, v čem může být problém?

Díky

Martk
Člen | 661
+
+1
-

Smaž klíčové slovo static u metody createRouter

Editoval Antik (12. 3. 2016 20:06)