Routování – styly a defaultní hodnoty
- Ola
- Člen | 385
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)
- David Grudl
- Nette Core | 8218
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
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
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
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
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.
- LM
- Člen | 206
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).