Problém s routami u submodulu

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

Ahoj,
o tomhle tu padlo už dost, ale nějak se v tom nemůžu vyznat, v těch routách se plácám.

Zkouším modulární aplikaci s modulama a v bootstrap.php mám definováno:

$container->router[] = $adminRouter = new RouteList('Admin');
$adminRouter[] = new Route('administrace/helloworld/<presenter>/<action>', array(
	'module' => 'Helloworld',
	'presenter' => 'Show',
	'action' => 'default'
));
$adminRouter[] = new Route('administrace/<presenter>/<action>', 'Dashboard:default');

Strukturu mám takovouto:

--AdminModule
---presenters
---templates
---HelloworldModule
----presenters
-----ShowPresenter.php
----templates
-----Show.default.latte

V ShowPresenter.php mám:

<?php
namespace AdminModule;

class ShowPresenter extends DashboardPresenter {

    public function renderDefault() {
		$this->template->value = "Hello World!";
	}

}

V podstatě to má udělat jen to, že to vypíše Hello World pomocí šablony, nic víc.
Ale laděnka mi vypisuje:

Cannot load presenter 'Admin:Helloworld:Show', class 'AdminModule\HelloworldModule\ShowPresenter' was not found in '/var/www/clients/client359/web529/web/devel_new/toman/nette/app/AdminModule/HelloworldModule/presenters/ShowPresenter.php'

Co dělám špatně?

Editoval darkwind (21. 5. 2012 20:24)

jtousek
Člen | 951
+
0
-

Máš špatně namespace. Hledá to třídu ‚AdminModule\HelloworldModule\ShowPresenter‘, ale najde jen ‚AdminModule\ShowPresenter‘. ;-)

darkwind
Člen | 32
+
0
-

Aha, děkuji. Upravil jsem ShowPresenter.php takto:

<?php
namespace AdminModule\HelloworldModule;

class ShowPresenter extends \AdminModule\DashboardPresenter {

    public function renderDefault() {
		$this->template->value = "Hello World!";
	}

}

… a vypadá, že to už aspoň zobrazuje, co má :-)

Jak se ale potom v šabloně @layout.latte, ve které bych chtěl umístit odkaz do tohoto submodulu, napat n:href?
Mám to takto absolutně, ale to nefunguje.

<a n:href=":Admin:Helloworld:show">Hello World</a>

Do hrefu to vygeneruje toto:

error: Cannot load presenter 'Admin:Helloworld', class 'AdminModule\HelloworldPresenter' was not found in '/var/www/clients/client359/web529/web/devel_new/toman/nette/app/AdminModule/presenters/HelloworldPresenter.php'.

Takže chápu asi dobře, že to chce odkazovat na Presenter a ne na modul. Ale jak to tedy nalinkuju na modul?

castamir
Člen | 629
+
0
-
<a n:href=":Admin:Helloworld:show">Hello World</a>

Odkazuje na modul Admin presenter Helloworld akci show

darkwind
Člen | 32
+
0
-

castamir: jj, já vím, kam to odkazuje :)) jen nevím, jak to mám napsat, aby to odkazovalo do toho submodulu :) poradíš prosím?

castamir
Člen | 629
+
0
-

chceš modul Admin submodul Helloworld presenter Show action pravdepodobne default (default.latte)
tj.

<a n:href=":Admin:Helloworld:Show:default">Hello World</a>

resp. tohle bych asi zkusil já, ale netestoval jsem to…

Ale moc se mi nelíbí ty tvé routy, zkusím mrknout, jak jsem vyřešil routy v jednom starším projektu…

Editoval castamir (21. 5. 2012 19:33)

darkwind
Člen | 32
+
0
-

díky moc, takto ten link už funguje..

a… no, já na ty routy taky nejsem pyšný :D kdyby byl nějaký způsob, jak je napsat nějak více univerzálně (tj. nepsat tam pro každý submodul routu), tak by to bylo super :-) za každou radu budu vděčný

vosy
Člen | 532
+
0
-

Ahoja, ja kdyz mam v presenteru:

$this->link('Admin:ZakladniInfo:JazykoveMutace');

tak mi to vytvori:
admin/zakladni-info.jazykove-mutace/

je mozne misto tecky docilit lomitka? na:
admin/zakladni-info/jazykove-mutace/

David Matějka
Moderator | 6445
+
0
-

nevim, proc to pises to vlakna, ktery s tim vubec nesouvisi..

koukni do dokumentace https://doc.nette.org/…tion/routing
konkretne na Transformace a preklady a Masky – budes muset zmenit FILTER_IN, FILTER_OUT a PATTERN pro presenter. jak je to nastaveny defaultne muzes videt zde