routa pro link setAffilate!

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

Nedaří se mi vytvořit routa pro akci..
Pro stránku routu umím vytvořit.

<?php
$router[] = new Route('<page>', array(
    'presenter' => 'Page',
    'action' => 'default',
));
?>

To jde, pokud mám pro tu stránku presenter.
Ale pak je tu akce, pro kterou nemám presenter ani šablonu… fci mám v basePresenter(u).

<?php
public function handleSetAffilate($src) {
	$affilate = new AffilateModel();
	$affilate->SetAffilate($src);
	$this->redirect('default:');
}
?>

A {link SetAffilate! 56} mi zobrazí toto:
/tarify?id=56&do=SetAffilate A já bych z toho potřeboval lepší URL např: /ref/56. Jak na to?

Aurielle
Člen | 1281
+
0
-
$router[] = new Route('<page>/<do>/<id>', array(
	'presenter' => 'Page',
	'action' => 'default',
	'do' => NULL,
	'id' => NULL,
));

by mělo fungovat…

MzK
Člen | 127
+
0
-

To nefunguje…
Zkusím to vysvětlit jinak:
V šabloně mi tento příkaz {link SetAffilate! 56}
vypíše toto:
/?id=56&action=admin&do=SetAffilate&presenter=Affilate a nebo toto /?id=56&do=SetAffilate pokud sem na hlavní stránce.
Čili podle toho kde se zrovna nacházím…
A já bych potřeboval místo /?id=56&action=admin&do=SetAffilate&presenter=Affilate vypsat přes routu třeba /aff/56 nebo /?id=56 to je celkem jedno…

Ondřej Mirtes
Člen | 1536
+
0
-

Ano, gmvasek ti sem napsal routu, kterou máš napsat místo té tvé, aby to fungovalo :) Není na tom nic složitého, prostě musíš do routy uvést parametr <do> a dát ho jako nepovinný.

MzK
Člen | 127
+
0
-

No těch rout tam musí být víc…
tyto používám do teď: Já vím, možná je jich zbytečně hodně, ale líp to udělat neumím :(

<?php
$router = Environment::getApplication()->getRouter();

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

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

$router[] = new Route('sitemap.xml', array(
    'presenter' => 'Sitemap',
	'action' => 'default',
));

$router[] = new Route('robots.txt', array(
    'presenter' => 'RobotsTxt',
	'action' => 'default',
));


$router[] = new Route('objednavka/<domain>', array(
    'presenter' => 'Domain',
    'action' => 'default',
	'domain'=> NULL
));

$router[] = new Route('objednavka2/<domain>', array(
    'presenter' => 'Domain',
    'action' => 'registertwo',
	'domain'=> NULL
));

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

$router[] = new Route('s/monitoring', array( // to 's/' tam musí být kvůli kompatibilitě s <page>
    'presenter' => 'Monitoring',
    'action' => 'default',
));

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

$router[] = new Route('affilate/admin', array(
    'presenter' => 'Affilate',
    'action' => 'admin',
));
?>

A potřebuji přidat routu pro /?id=56&do=SetAffilate

MzK
Člen | 127
+
0
-

Pokud

<?php
//Místo
$router[] = new Route('', array(
        'presenter' => 'Default',
        'action' => 'default'
));
udělám toto:
$router[] = new Route('<do>/<id>', array(
        'presenter' => 'Default',
        'action' => 'default',
        'do' => NULL,
        'id' => NULL,
));
?>

Tak mi to sice funguje na defaultu:/SetAffilate/56, Ale ostatní routy nefungují… There is no handler for signal 'tarify' in DefaultPresenter class.

Editoval zacatecnik (29. 3. 2010 23:11)