Moduly – cannot load presenter

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

Listoval jsem zde na fóru, našel mnoho podobných témat, ale žádné mi bohužel nedalo hledanou odpověď.

Mám adresáře:

/apps/AdminModule/presenters/...(UserRegistrationPresenter.php)
/apps/AdminModule/...(models, templates,...) /...

Route následující:

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

Po zadání url do prohlížeče:

Cannot load presenter 'Admin:Userregistration', class 'AdminModule\UserregistrationPresenter' was not found in 'D:\Installed\XAMPP\htdocs\gsh\document_root/../app/AdminModule/presenters/UserregistrationPresenter.php'.

A to je na tom zajímavé. V souboru UserRegistrationPresenter.php mám totiž:

final class UserRegistrationPresenter {...}

Zkoušel jsem i:

final class AdminModule\UserregistrationPresenter {...}

To ale skončí syntax chybou.

Opravdu nevím, v čem vězí chyba. Používám verzi 0.9 pro php 5.3. Temp jsem vyprázdnil.

Díky za náměty.

Echo

Editoval echo (29. 9. 2010 15:33)

22
Člen | 1478
+
0
-

ze by

final class Admin_UserRegistrationPresenter
newPOPE
Člen | 648
+
0
-
<?php
	$router[] = new Route('<module>/<presenter>/<action>/<id>', array(
        'module' => 'Admin',
        'presenter' => 'UserRegistration', //suffix Presenter tiez nie je potrebny
        'action' => 'default',
        'id' => NULL,
));

?>
echo
Člen | 134
+
0
-

Zkoušel jsem dát před tu třídu prefix, jak pravil ‚22‘. Nefungovalo, vypisuje pořád stejnou hlášku. Temp jsem vyprázdnil.

_Martin_
Generous Backer | 679
+
0
-

Pro ujasnění promaž temp a ověř následující:

  • PHP verze 5.2.x
  • router:
$router[] = new Route('<module>/<presenter>/<action>/<id>', array(
	'module' => 'Admin',
	'presenter' => 'UserRegistration',
	'action' => 'default',
	'id' => NULL,
));
  • adresáře:
define('APP_DIR', WWW_DIR . '/../app');
  • presenter uložen v /app/AdminModule/presenters/UserRegistrationPresenter.php a definován:
final class Admin_UserRegistrationPresenter extends Presenter // či nějaký BasePresenter
{
	// ...
}
  • zadávaná adresa v prohlížeči je http://localhost/

Vše souhlasí?

echo
Člen | 134
+
0
-

Ano, vše souhlasí, až na verzi php 5.3.1 (používám správnou verzi Nette)
Chyba se pořád zobrazuje.

pave.kucera
Člen | 122
+
0
-

Jestli používáš Nette pro php 5.3.x, tak presenter v modulu Admin se bude deklarovat takto:

<?php
namespace AdminModule;

final class UserRegistration extends \Nette\Application\Presenter {
...
}
?>
_Martin_
Generous Backer | 679
+
0
-

Přesně jak píše JannBaill – a opovaž se říct, že to nefunguje ;)

echo
Člen | 134
+
0
-

Konečně, třída načtena, ale bohužel další problém xD.

Načte se @layout.phtml, ale nemohu do něj vložit jinou šablonu pomocí {include #content}, v druhé šambloně samozřejmě mám {block content}.

Error: Call to undefined block ‚content‘.

Díky

Editoval echo (29. 9. 2010 15:28)

Aurielle
Člen | 1281
+
0
-

Definuj blok v šabloně jako {block #content} (chybí ti #)

_Martin_
Generous Backer | 679
+
0
-

@gmvasek: To by mělo být v pořádku, # říká, že se odkazuješ na blok, není to součástí názvu (ve skeletonu je to taky bez #).

@echo:

Takže máš soubory

  • /app/AdminModule/templates/@layout.phtml
  • /app/AdminModule/templates/UserRegistration/default.phtml

a nic se ti nezobrazí?

Jakou verzi Nette používáš? U 0.9.x verze je třeba mít v BasePresenter.php zapnuto používání nových šablon

public $oldLayoutMode = FALSE;
echo
Člen | 134
+
0
-

Veni, vidi, vici,

nevím, jak se to podařilo, ale povedlo se. Pár věcí jsem popřehazovat a najednou to funguje. K těm adresářům:
Chtělo to po mně, abych přesunul soubory z:

/app/AdminModule/templates/@layout.phtml
/app/AdminModule/templates/UserRegistration/default.phtml

do:

/app/templates/AdminModule/@layout.phtml
/app/templates/AdminModule/UserRegistration/default.phtml

Tak jsem to přehodil a je pokoj. :-)

22
Člen | 1478
+
0
-

to je asi nejaky divny, mel by jsi mit modul a v tom sablony a presentery, ne opacne.

_Martin_
Generous Backer | 679
+
0
-

Tohle mi moc nedává smysl. Můžeš mi napsat, jakou verzi Nette přesně máš? Chápu, že teď to funguje – ale do budoucna bys s tím mohl mít problém, protože tohle je zvláštní (alespoň v nejnovější verzi Nette 2 se šablony hledají v cestách, které jsem popsal).

echo
Člen | 134
+
0
-

verze Nette je 0.9.6 pro PHP 5.3.0

_Martin_
Generous Backer | 679
+
0
-

Aha, takže používáš starý režim modulů. Lepší by bylo používat nový (a i nový režim šablon), ale to je na tobě.

echo
Člen | 134
+
0
-

Více by mi vyhovoval ten nový mód. Nevíte, jak by šel zapnout? Nastaveno mám:

public $oldLayoutMode = FALSE;
_Martin_
Generous Backer | 679
+
0
-

$oldLayoutMode je pro šablony, pro moduly slouží $oldModuleMode – taky nastavit na FALSE.

Jur4
Člen | 51
+
0
-

Přidej ještě.

public $oldModuleMode = FALSE;