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);
}