Routování – styly a defaultní hodnoty

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

Zdravím,
mám routu ve tvaru

Route::addStyle('page', null);
Route::setStyleProperty('page', Route::PATTERN, '.*?');

$router[] = new Route('<page>'), array(
	'presenter' => 'Pages',
	'page' => 'homepage'
));

A mám problém s defaultní hodnotou proměnný page .. Místo aby se k presenteru dostalo $page=„homepage“ tam mam $page jako null .. Pokud odstranim nastavení stylů tak to jede ..

Co s tím?

Editoval Ola (5. 3. 2009 15:54)

Jod
Člen | 701
+
0
-

Ja si defaultné parametre, ktoré ťahám z databázy radšej obsluhujem priamo v metóde. Keď neni parameter vytiahnem si štarovaciu stránku z databáze.

Ale ktovie čím to je, že to nejde.

David Grudl
Nette Core | 8218
+
0
-

Tvůj kód se dá zapsat i jednodušeji:

$router[] = new Route('<page .*?>'), array(
        'presenter' => 'Pages',
        'page' => 'homepage'
));

Výchozí hodnota se prakticky nikdy nepoužije, protože i prázdný řetězec bude routou akceptován a do parametru page se vloží prázdný řetězec.

Ola
Člen | 385
+
0
-

Nedá, taky sem to zkoušel :) Pak nastane problém pokud mám jako parametr page třeba polozka/podpolozka – zdědí se původní filtr rawurlencode, jak psal Jan Tvrdík.

Šla by ta routa z prvního příspěvku nahradit jinak než vlastním routerem?

Tak sem to nahradil nějak takhle:

Route::setStyleProperty('page', Route::PATTERN, ".{2,}?");

Jediný omezení by mělo bejt v minimálnim počtu znaků adresy, ale stejně 2 znakovou url neplánuju .. .+ tam bejt nemohlo, pak se mi nekonečně redirectovalo

EDIT: Tak ještě problém – do obou rout projde url typu //// Což koukám je i na nette.org .. Šlo by to nějak ošetřit?

Editoval Ola (9. 3. 2009 7:32)

David Grudl
Nette Core | 8218
+
0
-

Ola napsal(a):

Nedá, taky sem to zkoušel :) Pak nastane problém pokud mám jako parametr page třeba polozka/podpolozka – zdědí se původní filtr rawurlencode, jak psal Jan Tvrdík.

Jo, máš recht.

A proč tam nedáš třeba

Route::setStyleProperty('page', Route::PATTERN, '.+?');
Ola
Člen | 385
+
0
-

U .+? mi def. hodnota taky nejede, jelikož tam pak jako page dostanu / .. A taky to namatchuje více lomítek, stejně jako předchozí příklady..

Tak tohle taky funguje, poslední problém jsou ty ///// ..

Route::setStyleProperty('page', Route::PATTERN, ".+?[^/]+");

nevíte někdo jak se google staví k podobným duplicitám? myslím example.com vs. example.com/////////////

Editoval Ola (9. 3. 2009 7:57)

David Grudl
Nette Core | 8218
+
0
-

Ola napsal(a):

U .+? mi def. hodnota taky nejede, jelikož tam pak jako page dostanu / .. A taky to namatchuje více lomítek, stejně jako předchozí příklady..

To se mi nějak nezdá, kde by se to lomítko vzalo?

ad více lomítek: to řeší uriFilters v HttpRequest a na routování by to nemělo mít vliv.

Ola
Člen | 385
+
0
-

ad lomítka: díky, vyzkouším
EDIT: works .. Tak teď to funguje přesně tak jak chci :) Díky .. s tou maskou jakou sem psal předtim

ad 1 lomítko: Mám projekt v podadresáři ..

Editoval Ola (9. 3. 2009 8:13)

LM
Člen | 206
+
0
-

To lomítko tam stále otravuje, mám routu:

Route::addStyle('page', NULL);
Route::setStyleProperty('page', Route::PATTERN, '.+?');

$router[] = new Route('<page>', ...);

A url třeba https://texy.info/, v Url::$path je správně prázdný string, ale v Route::match() se vždycky k path lomítko připisuje, parametr page má pak opravdu hodnotu /, touhle routou by zadaná adresa neměla vůbec projít ne (pokud teda nemá page defaultní hodnotu)?

Navrhuji opravu a to aby lomítko na konci tohoto regexpu nebylo volitelné (přece jen je tam vždy).

David Grudl
Nette Core | 8218
+
0
-

fixed