Spojení action a id pomocí pomlčky
- Honca
- Člen | 28
Ahoj,
mám problém spojit v routě action a id pomocí pomlčky. Pokud mám
takovouto routu
<?php
$router[] = new NRoute('[<lang [a-z]{2}>/]<presenter>[/<action>[-<id>].html]', array(
'module' => 'Front',
'presenter' => 'Default',
'action' => 'default',
'id' => NULL,
'lang' => NULL,
));
?>
tak se link vygeneruje správně ve tvaru cs/nejaky-presenter/clanek-10.html , ale když na něj kliknu, hodí mi výjimku NBadRequestException Action name ‚clanek-10‘ is not alphanumeric string.
Jak by teda měla ta routa vypadat, aby byla tvaru action.html
i action-id.html ? Jde mi hlavně o tu pomlčku, když tam dám
třeba znaménko plus(+) místo tý pomlčky, tak funguje všechno
v pohodě..
Díky..
- LuKo
- Člen | 116
V routeru lze používat regulární výrazy, proto by mohlo fungovat něco
ve smyslu (v action
ale pak nemůžeš mít pomlčky):
<?php
$router[] = new NRoute('[<lang [a-z]{2}>/]<presenter>[/<action [^\-]>[-<id>].html]', array(...));
?>
A nebo jít na jistotu a udělat 2 routy:
<?php
$router[] = new NRoute('[<lang [a-z]{2}>/]<presenter>[/<action>-<id [0-9]+>.html]', array(...));
$router[] = new NRoute('[<lang [a-z]{2}>/]<presenter>[/<action>.html]', array(...));
?>
- Honca
- Člen | 28
LuKo napsal(a):
V routeru lze používat regulární výrazy, proto by mohlo fungovat něco ve smyslu (v
action
ale pak nemůžeš mít pomlčky):<?php $router[] = new NRoute('[<lang [a-z]{2}>/]<presenter>[/<action [^\-]>[-<id>].html]', array(...)); ?>
A nebo jít na jistotu a udělat 2 routy:
<?php $router[] = new NRoute('[<lang [a-z]{2}>/]<presenter>[/<action>-<id [0-9]+>.html]', array(...)); $router[] = new NRoute('[<lang [a-z]{2}>/]<presenter>[/<action>.html]', array(...)); ?>
Díky za odpověď :-)
Pokud ale použiju ty dvě routy, tak mi správně funguje tvar
action-id.html, jenže u adresy, která id nemá nastaveno, tak se použije
tvar action-.html a to já nechci :-(
dělalo mi to taky tohle předtím, když mi funguje jedno, tak zas nejde druhý
správně a nevím, jak na to..
- pave.kucera
- Člen | 122
Mělo by stačit dát tam další nepovinný parametr:
<?php
$router[] = new NRoute('[<lang [a-z]{2}>/]<presenter>[/<action>[-<id [0-9]+>.html]]', array(...));
$router[] = new NRoute('[<lang [a-z]{2}>/]<presenter>[/<action>.html]', array(...));
?>
- LuKo
- Člen | 116
<?php
$router[] = new NRoute('[<lang [a-z]{2}>/]<presenter>/<action>-<id [0-9]+>.html', array(
'module' => 'Front',
'lang' => NULL,
));
$router[] = new NRoute('[<lang [a-z]{2}>/]<presenter>[/<action>.html]', array(
'module' => 'Front',
'presenter' => 'Default',
'action' => 'default',
'id' => NULL,
'lang' => NULL,
));
?>
Zkoušel jsem u sebe, funguje podle očekávání.
- Patrik Votoček
- Člen | 2221
@Honca: prosím necituj příště celý předchozí komentář je to zbytečné a za*** se tím fórum. (citaci jsem odstranil)