Volání signálu – více modulů

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

VYŘEŠENO

Mám (pro testovací účely) v @layout:

<a n:href="Sig! 5">Kosik</a>

v HomepagePresenteru (který je v namespace FrontModule) mám funkci handeSig($id). Po kliknutí na link, ale Laděnka: Cannot load presenter 'Front:Front:Homepage. Proč proboha tam je to dvojité Front? Je mi jasné, že zde je kámen úrazu. Normální „Homepage:“ funguje v pořádku! I odkaz na signál je znetvořený – .../front.homepage/default/5?do=Sig. Špatně signál volám? Přeci se volá na současný presenter, takže není třeba upřesňovat místo (resp. ani nevím jak).

Díky moc za radu, už mě to otravuje pár dnů :).

Editoval aGr (24. 2. 2012 16:38)

Ot@s
Backer | 476
+
0
-

Vypadá to divně… Vyzkoušej onen signál v sandboxu (nebo v examples s moduly).
Jak máš napsané routy aplikace?

Jan Tvrdík
Nette guru | 2595
+
0
-

Signály se normálně píší malými písmeny (sig!), ale to by na to snad nemělo mít vliv.

semtex.989
Člen | 75
+
0
-

Co třeba místo handeSig($id) tam dát handleSig($id) ??

aGr
Člen | 45
+
0
-

Ot@s napsal(a):

Vypadá to divně… Vyzkoušej onen signál v sandboxu (nebo v examples s moduly).
Jak máš napsané routy aplikace?

V sandboxu funguje. Routy jsem měl takto:

$router[] = new Route('index.php', 'Front:Homepage:default', Route::ONE_WAY); //homepage

$router[] = $adminRouter = new RouteList('Admin');
$adminRouter[] = new Route('admin/<presenter>/<action>', 'Homepage:default');

$router[] = $frontRouter = new RouteList('Front');
$frontRouter[] = new Route('<presenter>/<action>/<name>', array(
						    'presenter' => array(
						        Route::VALUE => 'Homepage',
						        Route::FILTER_TABLE => array(
						            'produkt' => 'Product',
						            ...preklady dalsich presenteru
						        ),
						    ),
						    'action' => 'default',
						    'id' => NULL,
					));
$router[] = new Route('<presenter>/<action>[/<id>]', 'Front:Homepage:default'); //zbytek

Teď koukám, že ta poslední je nějaká zbytečná. Zkusil jsem tedy routy upravit takto:

$router[] = new Route('index.php', 'Front:Homepage:default', Route::ONE_WAY); //index.php
$router[] = new Route('', 'Front:Homepage:default');  //homepage

$router[] = $adminRouter = new RouteList('Admin');
$adminRouter[] = new Route('admin/<presenter>/<action>', 'Homepage:default');

$router[] = $frontRouter = new RouteList('Front');
$frontRouter[] = ...

a signál funguje! Jsem to ale blb, měl jsem koukat do routeru rovnou. Je takhle ta druhá routa pro Homepage v pořádku?

EDIT: není to v pořádku. Signál funguje jen na homepage. Jakmile to přesunu do BasePresenteru, který všechny ostatní dědí, dostávám v jiných presenterech stejné chyby. Jdu si přečíst info o routách, neboť tomu evidentně nerozumím..

Editoval aGr (24. 2. 2012 16:20)

aGr
Člen | 45
+
0
-

semtex.989 napsal(a):

Co třeba místo handeSig($id) tam dát handleSig($id) ??

To bylo jen typo, v kódu to mám dobře.

aGr
Člen | 45
+
0
-

Tak opraveno. Hlávní Front routě jsem dal výchozí parametry $frontRouter[] = new Route('<presenter=Homepage>/<name=homepage>/'... a nechal pouze tu ONE_WAY kvůli indexu. Celou dobu jsem chybu hledal v namespacech, díky za postrčení správným směrem.