Route: Cesta v url

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jan Tvrdík
Nette guru | 2595
+
0
-

Mám následující routu:

$router[] = new Route('//archiv.example.com/<path .*?>', array(
	'module'    => 'Archiv',
	'presenter' => 'Archiv',
	'action'      => 'default',
	'path'      => NULL,
));

Problém je, že pokud path obsahuje v sobě lomítko, tak ho Nette přesměruje na neexistující adresu:

GET /slozka1/slozka2 HTTP/1.1
Host: archiv.example.com
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=8108cl002n0jn5q6b78a3has92

HTTP/1.x 302 Found
Date: Sun, 16 Nov 2008 09:27:47 GMT
Server: Apache/2.2.6 (Win32) PHP/5.3.0alpha3-dev DAV/2 SVN/1.4.6
X-Powered-By: Nette Framework
Location: http://archiv.example.com/slozka1%2Fslozka2
Connection: close
Content-Length: 112
Content-Type: text/html
----------------------------------------------------------
GET /slozka1%2Fslozka2 HTTP/1.1
Host: archiv.example.com
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=8108cl002n0jn5q6b78a3has92

HTTP/1.x 404 Not Found
Date: Sun, 16 Nov 2008 09:27:47 GMT
Server: Apache/2.2.6 (Win32) PHP/5.3.0alpha3-dev DAV/2 SVN/1.4.6
Content-Length: 213
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

Editoval Jan Tvrdík (16. 11. 2008 10:35)

Jan Tvrdík
Nette guru | 2595
+
0
-

Tak už jsem našel řešení:

Problém byl způsoben výchozím stylem v Routě, takže řešení je napsat si vlastní styl:

Route::$styles['path'] = array(
		Route::PATTERN => '.*?',
);

$router[] = new Route('//archiv.example.com/<path>', array(
	'module'    => 'Archiv',
	'presenter' => 'Archiv',
	'action'      => 'default',
	'path'      => NULL,
));

Editoval Jan Tvrdík (16. 11. 2008 13:38)

David Grudl
Nette Core | 8218
+
0
-

Ano, ten problém je v tom, že výchozí styl má nastaveno self::FILTER_OUT => 'rawurlencode'.