Presenter a Action z URL strtolower
- Sonny
- Člen | 13
Dobrý den,
mám níže uvedenou routu, která v podstatě funguje dobře. Problém nastane, pokud někdo přistoupí na adresu /Kosik (velke K na začátku nebo i jakákoliv jiná kombinace velkých a malých písmen).
Potřeboval bych poradit, jak zajistit, aby po matchnutí routy se parametry presenter a action prohnali přes funkci strtolower a došlo k přesměrování na variantu jen s malými písmeny. Samozřejmě se to nesmí dostat do nekonečné smyčky, ale to předpokládám, že už si ošetřím.
Obecně by se mi toto chování hodilo pro všechny presentery a akce i mimo ty z filtrovací tabulky.
Používám Nette 2.3.10
Děkuji
$router[] = new Route('[<currency CZK|EUR>/]<presenter>/<action>/[<id>[-<name>]/][page/<visualPaginator-page>/][sort/<sortBy>/[<sortHow>/]]', array(
'presenter' => [
Route::VALUE => 'Product',
Route::FILTER_TABLE => [
'karta' => 'VoucherRetail'
]
],
'action' => array(
Route::VALUE => 'default',
Route::FILTER_TABLE => array(
'krok1' => 'step1',
'krok2' => 'step2'
)
)
));
- David Matějka
- Moderator | 6445
myslim, ze nepujde pouzit FILTER_TABLE, ale budes muset pouzit FILTER_IN a FILTER_OUT, coz je funkce, ktera transformuji vstup/vystup jak potrebujes. takze tam provedes strtolower a pak tam budes mit nejaky vlastni ekvivalent FILTER_TABLE
- Sonny
- Člen | 13
Omlouvám se, že píšu až teď, ale nepřišel mi mail.
Pro testování jsem všechny routy odstranil a nechal jen jednoduchou routu. Aktuálně mým cílem bylo zprovoznit správně zadané adresy (/cart a /product), což funguje. A jako druhý krok jsem chtěl vyřešit adresy ve tvaru /carT nebo /pRoduct. U takovýchto adres mi ale Nette vyhodí 404 dříve, než se dostane na funkci FILTER_IN. Stejné chování nastává i když FILTER_IN dám přímo u parametru presenter.
Prosím ještě o nakopnutí. Děkuji
$router[] = new Route('<presenter>/<action>/',
[
'presenter' => [
Route::VALUE => 'Product',
],
'action' => array(
Route::VALUE => 'default',
),
NULL => [
Route::FILTER_IN => function ($params) {
$params['presenter'] = ucfirst(strtolower($params['presenter']));
return $params;
},
]
]
);
- David Matějka
- Moderator | 6445
ajo vlastne. tam jsou pro presenter a action defaultni masky
takze by melo staci upravit tu routu na neco jako
<presenter [a-zA-Z][a-zA-Z0-9.-]*>/<action [a-zA-Z][a-zA-Z0-9.-]*>