config.neon – class modelu v jinem modulu nez ostatni modely

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

moje struktura v /apps je:

FrontModule

models

AdminModule

models

v config.neon mam

		robotLoader:
			run: true

		menuModel:
			class: MenuModel
			arguments: [@database]
		...

		dalsiModel:
			class: DalsiModel
			arguments: [@database]

Problem je v tom, ze menuModel, ktery je ve slozce /apps/FrontModule/models/ funguje, zatimco dalsiModel nefunguje (class not found) je ve slozce /apps/AdminModule/models/

Je mozne ze si to tam robotloader neumi najit?

dik

duke
Člen | 650
+
0
-

Zkus smazat cache robotLoaderu. RobotLoader sice umí něco jako autoRebuild, ale ten se aktivuje jen pokud není detekován produkční mód, což asi nebude tvůj případ…

Ještě můžeš ten produkční mód vypnout ručně, což uděláš tak, že do bootstrap.php umístíš toto:

// Load configuration from config.neon file
$configurator = new Nette\Configurator;
$configurator->setCacheDirectory(__DIR__ . '/../temp');

$configurator->addParameters(array(
	'productionMode' => FALSE
));
simPod
Člen | 383
+
0
-

dekuji za odpoved.

cache robotloaderu jsem zkousel smazat, ale ot nepomohlo

Jinak zkousim to na localhostu, productionmode by mel byt off, vyskakuje mi debugbar a ladenka

Fatal Error

Class 'DalsiModel' not found

Po smazani cache a jejim obnoveni vidim v ladence:

File: ...\temp\cache\_Nette.Configurator\_-5e94702b18ff9d7eacbf4133444b518d.php   Line: 33

26:
27:    $container->addService('menuModel', function($container) {
28:        $class = 'MenuModel'; $service = new $class($container->getService('database'));
29:        return $service;
30:    }, NULL);
31:
32:    $container->addService('dalsiModel', function($container) {
33:        $class = 'DalsiModel'; $service = new $class($container->getService('database'));
34:        return $service;
35:    }, NULL);
36:
37:    date_default_timezone_set('Europe/Prague');
38:
39:    Nette\Caching\Storages\FileStorage::$useDirectories = true;
40:
pawouk
Člen | 172
+
0
-
  1. Zkontroluj zda je model ve složce kterou robotLoader prohledává (to je defaultně appDir a libsDir) a pokud je model v jiné tak ho bud presun, nebo zahrn tuto slozku do robotloaderu.
  2. Zkontoluj jmeno modelu. V configu musi byt plnej meno! Tedy napriklad:
class: \MujNamespace\MojeApp\MujModel
  1. zkontroluj, zda ma soubor koncovku php. Parkrat se mi stalo ze jsem tam nemel koncovku php a dalo mi dost prace to najit.
  2. v zoufalosti pak zkus model vytvoret rucne nekde v apliakaci a dej echo jestli alespon to jde.

(Pri kazdem pokusu radeji smaz cache robotloaderu.)

JuniorJR
Člen | 181
+
0
-

Řekl bych, že máš bordel v namespace, viz. 2. bod od pawouka.

simPod
Člen | 383
+
0
-

aha, uz to mam. Ja mel v modelu zadan namespace namespace AdminModule

zjistil jsem, ze se v modelu nezadava ;)

diky

JuniorJR
Člen | 181
+
0
-

simPod napsal(a):

zjistil jsem, ze se v modelu nezadava ;)

To je zavádějící tvrzení. Zadává se tam, kde je to vhodné. :)
IMHO z hlediska praktičnosti je vhodnější ho vsunout alespoň do nějakého zákl. namespace.

Editoval JuniorJR (7. 12. 2011 22:01)

simPod
Člen | 383
+
0
-

aha. no v tomto pripade byla chyba v zadanem namespace i kdyz model byl umisten v modulu