Action name is not alphanumeric string

- simPod
- Člen | 383
v url mam tento string test-50-test na pozici
<action> v route. Routa to zaregistruje (je zelena v debbug
baru) avsak pozadavek vypada pak
takhle: Front:MyPresenter:test-50Test
kdyz je string `test50-test tak je vse v poradku
da se to nejak napravit, aby to bralo test-50-test? diky

- simPod
- Člen | 383
to nesouvisi s mym kodem, dela to i sandbox kdyz zadas adresu
treba /Homepage/test-50-test
Tam jde o to, ze by to pak volalo function actionTest-50Test,
ale ja potrebuju treba function actionTest50Test protoze
function actionTest-50Test je blbost. Takze ted je otazka, jak
vyresit tohle

- simPod
- Člen | 383
no, routa a vse ostatni je stejne jako v sandboxu
$container->router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
jen v prezenteru mam v metode startup()
$this->setView('default'); a v renderDefault()
ziskavam obsah <action> z routy
pomoci $this->getAction()

- petr.pavel
- Člen | 535
Standardní routování (to, co's poslal) způsobí, že se do action dosadí část url (test-50-test) a z toho se vyrobí název metody presenteru (čekal bych actionTest-50-test, ale sám vidíš, na co se to překládá).
Jestli ti to nevyhovuje (potřebuješ vyházet pomlčky), tak si budeš muset napsat vlastní routovací překladač/filtr
Teď, když vidíš, kolik práce by to bylo, tak možná radši změníš ta url :-) (přestaneš používat pomlčky v url a nahradíš je lomítky, které jdou pomocí std routovacích pravidel snadno převést na parametry akce/renderu).
P.S. Poprosil bych diskutující o větší přívětivost. Možná jste to tak nemysleli, ale vaši stručnost a volbu slov lze pochopit jako aroganci.

- Jan Tvrdík
- Nette guru | 2595
petr.pavel wrote:
Standardní routování (to, co's poslal) způsobí, že se do action dosadí část url (test-50-test) a z toho se vyrobí název metody presenteru.
Píšeš nesmysly, takhle se to vůbec nechová. Parametr action je standardně filtrován.

- Ascaria
- Člen | 187
Už asi vím čím to je: URL string aa-bb-cc se mění na aaBbCc, zkrátka pomlčka + písmeno se změní na velké písmeno (a opačně) tak, aby se pomlčka nemohla vyskytnout v názvu akce (kde ani nemůže být). Jenže číslo to nepozná, a tak tam pomlčku nenahradí a tudíž vznikne tebou popisovaná chyba. Máš tedy čtyři možnosti:
- upravit filtr tak, aby pobral i číslo (jenže to nejde měnit na velké a malé číslo, tak nebude vědět jestli má pomlčku nazpátek dosadit)
- upravit nazev akce, aby za každou pomlčkou následovalo alespoň 1 písmeno (test-i50-test)
- nepoužívat čísla v akcích (osobně jsem za dobu co používám Nette nepotřeboval číslo v action)
- napsat vlastní definici routy, která bude problém řešit a například rozdělí „test-50-test“ na oddělené části „test“ a „50“ a „test“ a action pak bude například jen „test“ a ostatní dvě části budou další parametry
Editoval Ascaria (11. 6. 2012 12:49)

- Michal Majer
- Člen | 8
Právě jsem narazil na stejný problém. V administraci používám pro
tvorbu stringu do url funkci Strings::webalize() a pokud např.
klient přidal stránku s názvem „Turnaj Krumlov 2012“, nastaly
potíže.
Vyřešil jsem to tak, že jsem před konec funkce
Strings::Webalize() přidal tento kód:
for($i=0;$i<10;$i++) {
$s = str_replace('-'.$i, '-i'.$i, $s);
}