Špatná action formuláře v modulu

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

Mám divnej problém a to sice, že form generuje špatnou action viz.

/document_root/admin/?do=form-submit

správná action by měla být:

/document_root/admin/edit/?do=form-submit

routa do modulu je:

$router = $application->getRouter();

$router[] = new Route('index.php', array(
	'module' => 'Front',
	'presenter' => 'Homepage',
	'action' => 'default',
), Route::ONE_WAY);

$router[] = new Route('admin/<presenter>/<id>', array(
	'module' => 'Admin',
	'presenter' => 'Edit',
	'action' => 'default',
	'id' => NULL,
));

$router[] = new Route('<presenter>/<id>', array(
	'module' => 'Front',
	'presenter' => 'Homepage',
	'action' => 'default',
	'id' => NULL,
));

zajimavý je, že když umístím form do mudulu na jinej presenter, než je uvedenej jako default v routeru, tak se action generuje správně.
Co dělám špatně?

Nette2 Alpha2

Editoval Chbox (9. 12. 2010 6:49)

Foowie
Člen | 269
+
0
-

A na kterou routu by se ta „správná action“ měla namatchovat?

Editoval Foowie (9. 12. 2010 8:05)

Chbox
Člen | 125
+
0
-

tak z osatanich presenteru v modulu se to matchuje na:

$router[] = new Route('admin/<presenter>/<id>', array(
	'module' => 'Admin',
	'presenter' => 'Edit',
	'action' => 'default',
	'id' => NULL,
));

krom presenteru edit, krej je uvedenej v zavoren jako default pro masku admin..

kravčo
Člen | 721
+
0
-

Podľa tvojej definície rout sú obe actiony

/document_root/admin/?do=form-submit
/document_root/admin/edit/?do=form-submit

ekvivalentné ale Nette generuje tú, ktorá je kratšia. Je tomu tak preto, že prezenter Edit je predvolený a teda sa z URI odstraňuje.

Ak riadok

'presenter' => 'Edit',

z definície admin routy odstrániš, bude sa generovať action akú chceš, no lepšie asi bude, ak sa uspokojíš s tou, aká je, pretože by mala byť v poriadku. Ktorá routa sa naozaj použila zistíš najlepšie pomocou RoutingDebuggera, ktorý je štandardne v nette paneli.

Chbox
Člen | 125
+
0
-

no problem je s tim, ze se neprovede callback na onSubmit[], protoze action smeruje jinam nez na EditPresenter, takze se akorat udela diky submit refresh a tim to hasne.
Jak z toho teda ven?
URL formu je /document_root/admin/edit/ kam se to i vrati po stisku tlacitka Submit.

Chbox
Člen | 125
+
0
-

Přidal jsem routu speciálne pro admin a action formu se teď generuje správně, no nevim, jestlli je to správné řešení:

$router[] = new Route('index.php', array(
	'module' => 'Front',
	'presenter' => 'Homepage',
	'action' => 'default',
), Route::ONE_WAY);

$router[] = new Route('admin/<presenter>/<id>', array(
	'module' => 'Admin',
	'action' => 'default',
	'id' => NULL,
));

$router[] = new Route('admin', array(
	'module' => 'Admin',
	'presenter' => 'Edit',
	'action' => 'default',
	'id' => NULL,
));

$router[] = new Route('<presenter>/<id>', array(
	'module' => 'Front',
	'presenter' => 'Homepage',
	'action' => 'default',
	'id' => NULL,
));

…zároveň asi prosím adminy o přesun příspěvku do vlákna „Routovaní“