Přeskakování routy pokud nevyhovuje

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

Dá se nějak udělat přeskočení routy pokud nevyhovuje? Dejme tomu že mam routu:

http://domena.tld/username/profil

new NetteRouteMock('//app.[!<domain [a-zA-Z0-9-]+>].[!<tld [a-zA-Z0-9-]+>]/[!<locale [a-z]{2,4}>/]/<user>/<action>', array(
	'module'	=> 'Application',
	'presenter'	=> 'Profile',
	'action'	=> 'default',
	'locale'	=> array(
		Route::VALUE	=> 'en',
		'fixity'		=> Route::CONSTANT,
	)
));

a taky bych chtěl mít routu

http://domena.tld/modul/akce

new NetteRouteMock('//app.[!<domain [a-zA-Z0-9-]+>].[!<tld [a-zA-Z0-9-]+>]/[!<locale [a-z]{2,4}>/]/<presenter>/<action>', array(
	'module'	=> 'Application',
	'presenter'	=> 'Default',
	'action'	=> 'default',
	'locale'	=> array(
		Route::VALUE	=> 'en',
		'fixity'		=> Route::CONSTANT,
	)
));

a chci aby ta první byla zpracována jen pokud se podaří najít uživatele podle jeho ursername, pokud se nepodaří najít, tak ať je routa přeskočena a zpracuje se druhá.

Editoval akadlec (7. 3. 2014 13:03)

David Matějka
Moderator | 6445
+
0
-

dej si FILTER_IN na user a pokud ho nenajde, vrat NULL

akadlec
Člen | 1326
+
0
-

ha FILTER_IN mám ale vracel jsem FALSE, může to být tedy tím že se nepřeskočí?

David Matějka
Moderator | 6445
+
0
-

jj, FALSE je z hlediska Route validni hodnota. Pro zamitnuti pouzivej vzdy NULL

akadlec
Člen | 1326
+
0
-

tak asi něco dělám blbě, vrátím ve filter_in null ale stejnak mě to tu routu bere. Když se podívám do debugbaru na routy, tak u ní vidím yes a hned za ní mám další routu která by to měla obsloužit a u ní je may takže routy jsou asi ok. Ten parametr na základě kterého se má routa přeskočit taky ukazuje NULL hodnotu. Je potřeba nastavit ještě nějaký parametr?

$list[] = new NetteRouteMock('[!<locale [a-z]{2,4}>/]mailbox[/<mailbox>]', array(
	'module'	=> 'Application',
	'presenter'	=> 'Default',
	'action'	=> 'default',
	'mailbox'	=> array(
		Route::FILTER_OUT	=> 'MailboxModule\Router\FoldersRouter::getFolderSlugById',
		Route::FILTER_IN	=> 'MailboxModule\Router\FoldersRouter::getFolderIdBySlug'
	),
	'locale'	=> array(
		Route::VALUE	=> 'en',
		'fixity'		=> Route::CONSTANT,
	)
));
$list[] = new NetteRouteMock('[!<locale [a-z]{2,4}>/]mailbox/<presenter>[/<action>][/<id>]', array(
		'module'	=> 'Application',
		'presenter'	=> 'Default',
		'action'	=> 'default',
		'locale'	=> array(
			Route::VALUE	=> 'en',
			'fixity'		=> Route::CONSTANT,
		)
	));

url je:

http://domain.tld/en/mailbox/settings/

a router ukazuje:

yes

Route 	[!<locale [a-z]{2,4}>/]mailbox[/<mailbox>]
module = Application
presenter = Default
action = default
mailbox = NULL
locale = en

Mailbox:Application:Default:default
locale = en
mailbox = NULL
may
Route 	[!<locale [a-z]{2,4}>/]mailbox/<presenter>[/<action>][/<id>]
module = Application
presenter = Default
action = default
locale = en
id = NULL

Mailbox:Application:Settings:default
locale = en
id = NULL
Jan Tvrdík
Nette guru | 2595
+
0
-

<mailbox> nesmí být volitelný parametr, nebo bys musel použít výrazně mocnější globální filtry.

akadlec
Člen | 1326
+
0
-

Aaaa jasný. Dík za nakopnutí.

Jan Tvrdík
Nette guru | 2595
+
0
-

Můžu se ještě zeptat, k čemu si myslíš, že slouží to 'fixity' => Route::CONSTANT?

akadlec
Člen | 1326
+
0
-

Přiznám se že nevím, jen jsem to viděl v příkladu routeru kde se řešila lokalizace.

Michal Vyšinský
Člen | 608
+
0
-

@Jan Tvrdík: K čemu slouží Route::CONSTANT? Vidím tuto konstantu poprvé :)

Editoval Michal Vyšinský (20. 3. 2014 9:57)

Jan Tvrdík
Nette guru | 2595
+
0
-

@Michal Vyšinský: Je to interní konstanta, kterou nemá nikdo používat.

akadlec
Člen | 1326
+
0
-

takže fixity vyhodit? k čemu to teda je?