Jak dostat hodnotu 0 skrz router?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
webman
Člen | 15
+
0
-

Zdravím,

možná se ptám hloupě, ale nezdá se mi způsob, jaký se chová router, když jako parametr dostane hodnotu 0.

příklad
http://www.domain.example/something/list/3/0/name

Zkoušel jsem použít routu

$router[] = new Route('<presenter>/list[/<limit>[/<offset>[/<orderby>[/<desc>]]]]',
 array('presenter' => 'Homepage','action' => 'list','iface' => 1,'limit' => 0,
'offset' => 0,'orderby' => NULL,'desc' => 'ASC'));

nebo

$router[] = new Route('<presenter>/list[/<limit>[/<offset>[/<orderby>[/<desc>]]]]',
 array('presenter' => 'Homepage','action' => 'list','iface' => 1,'limit' => 0,
'offset' => NULL,'orderby' => NULL,'desc' => 'ASC'));

nebo

$router[] = new Route('<presenter>/list[/<limit>[/<offset>[/<orderby>[/<desc>]]]]',
 array('presenter' => 'Homepage','action' => 'list','iface' => 1,'limit' => 0,
'offset' => -1,'orderby' => NULL,'desc' => 'ASC'));

nebo

$router[] = new Route('<presenter>/list[/<limit>[/<offset>[/<orderby>[/<desc>]]]]',
 array('presenter' => 'Homepage','action' => 'list','iface' => 1,'limit' => 0,
'offset' => 'none','orderby' => NULL,'desc' => 'ASC'));

Ve všech uvedených případech, pokud je parametrem 0, nahradí se parametr za výchozí hodnotu bez ohledu na to, jaká je. Pokud tedy použiju první variantu, zkrátí mi to url dotaz na:
http://www.domain.example/something/list/3/
To chápu. To má logiku.

Jenže v ostatních přípdech mi ho to taky ořízne a ještě mi to ‚zprzní‘ data, např.:
http://www.domain.example/something/list/3/none

Otázka zní – co dělám špatně?

Editoval webman (10. 4. 2016 12:33)

skrivy
Člen | 51
+
-2
-
http://www.domain.example/something/list/3/0/name

nebylo by spis lepsi to delat:

http://www.domain.example/something/list?limit=3&offset=0&order=name

Editoval skrivy (10. 4. 2016 13:59)

webman
Člen | 15
+
-1
-

To je jako odpovědět na otázku „proč mi nejede auto“, otázkou, jestli by nebylo lepší jet autobusem. Šlo by to, ale lepší by to nebylo. Na to snad ten router je, aby šly udělat hezčí url. Mám své důvody proč to nechci řešit klasickou url, ale přes router.

David Grudl
Nette Core | 8218
+
+1
-

Jak máš definovanou metodu renderList() ?

webman
Člen | 15
+
0
-
public function renderList($limit=0, $offset=0, $orderby=NULL, $desc='ASC')

právě asi začínám tušit smysl této otázky…

Editoval webman (10. 4. 2016 15:55)

webman
Člen | 15
+
0
-

Díky moc!! Funguje!

nově:

public function renderList($limit=0, $offset=NULL, $orderby=NULL, $desc='ASC')

Nenapadlo mě, že si router bude brát výchozí hodnoty z metody presenteru.

Editoval webman (10. 4. 2016 15:58)

Myiyk
Člen | 321
+
0
-

Co ti na tom nefunguje?

Ta první routa s parametry

array(
		'action' => 'list',
		'iface' => 1,
		'limit' => 3,
		'offset' => 0,
		'orderby' => 'name',
		'desc' => 'ASC',
	)

vygeneruje adresu http://example.com/something/list/3/0/name

webman
Člen | 15
+
0
-

Je mi to hloupé, ale měl bych ještě jeden dotaz:

$router[] = new Route('<presenter>/list[/<limit>[/<offset>[/<orderby>[/<desc>]]]]',
 array('presenter' => 'Homepage','action' => 'list','iface' => 1,'limit' => 0,
'offset' => NULL,'orderby' => NULL,'desc' => 'ASC'));
$router[] = new Route('api/<presenter>/<action>[/<id>]', array('presenter' => 'Homepage',
'action' => 'default','iface' => 2,'id' => NULL),Route::ONE_WAY);
$router[] = new Route('<presenter>/<action>[/<id>]', array('presenter' => 'Homepage',
'action' => 'default','iface' => 1,'id' => NULL));

Ta první routa už funguje OK, ale po přihlášení a přesměrování na http://example.com/ se router domnívá, že výchozí presenter celého webu je Homepage:List.
Přitom ta maska těch prvních dvou rout tomu neodpovídá (chybí tam /list), takže mi není jasné proč si to bere výchozí presenter z první routy a ne z poslední…

EDIT:
lze to vyřešit přidáním této routy na začátek, ale nepřijde mi to čisté řešení…

$router[] = new Route('', array('presenter' => 'Homepage','action' => 'default'));

Editoval webman (10. 4. 2016 16:35)