Application::Route a parametry komponenty

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

Hodilo by se kdyby bylo možné v routě přenášet i parametry komponent, teď se parametry komponenty přenášejí jako nazevkomponenty-parametr, bohužel takový název nelze použít v routě (omezení PCRE):

new Route('neco/<nazevkomponenty-parametr>', array(
	'nazevkomponenty-parametr' => …,
); // exception: Parameter name must be alphanumeric string due to limitations of PCRE, 'nazevkomponenty-parametr' is invalid.

Tohle funguje, ale pěkná URL je pryč.

new Route('neco ? param=<nazevkomponenty-parametr>', array(
	'nazevkomponenty-parametr' => …,
);

Řešili jste to někdo? lze to nějak obejít?

phx
Člen | 651
+
0
-

Jedine co me napada je tento parametr predavat prostrednictvim persistentniho parametru v presenteru. Je to sice prace navic, ale o nicem jinem nevim.

LM
Člen | 206
+
0
-

To by byl návrat k tomu, kdy persistentní parametry komponenty ještě nebyly to pravé :-/

phx
Člen | 651
+
0
-

But David opravi tridu Route nebo si udelej MyRoute kde si to osetris po svem. Typoval bych ze bude stacit vyhodit ono overeni na PCRE omezeni.

David Grudl
Nette Core | 8147
+
0
-

To ověření není samoúčelné, jak je uvedeno ve zprávě výjimky, jde skutečně o omezení PCRE, které nedovoluje mít v názvu parametru regulárního výrazu jiný znak než [0-9a-zA-Z_] + nějaké další mimo ASCII rozsah.

Ale nějakým nečistým trikem by to obejít šlo…

David Grudl
Nette Core | 8147
+
0
-

spojovník v parametru by měl fungovat

LM
Člen | 206
+
0
-

nefunguje, neprojde mi test, výsledek:

/any:

Warning:  preg_match() [function.preg-match]: Compilation failed: syntax error in subpattern name (missing terminator) at offset 8 in /var/www/libs/Nette/Application/Route.php on line 154

no match
parsed: ***ERROR***

PHP 5.2.6, linux, PCRE: 7.6 2008–01–28

David Grudl
Nette Core | 8147
+
0
-

ok, zkusil jsem to udělat ještě jinak

LM
Člen | 206
+
0
-

Super tohle řešení je určitě mnohem kompatibilnější : ) Dík!

LM
Člen | 206
+
0
-

Ještě taková malý chybka pokud nastavím defaultní hodnotu parametru:

$route = new Route('<para-meter>', array(
	'presenter' => 'Presenter',
	'para-meter' => 'meter',
));

Háže to pak notice:

Notice:  Undefined index:  default in /var/www/libs/Nette/Application/Route.php on line 177

Chyba je v http://code.google.com/…on/Route.php#450, kdy se již pracuje s para___meter namísto para-meter : )

David Grudl
Nette Core | 8147
+
0
-

opraveno