Service ‚homeModel‘ not found. po upgradovani config.neon a bootstrap.php

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

Nahral jsem nove Nette (2.0.1) (upgrade z beta verze) a zmenil jsem si obsah config.neon na:

common:
	php: # PHP configuration
		date.timezone: Europe/Prague
		# session.save_path: "%tempDir%/sessions"
		# zlib.output_compression: yes

	nette:
		session:
			autoStart: smart

		database:
			default:
				dsn: '%database.driver%:host=%database.host%;dbname=%database.dbname%'
				user: %database.user%
				password: %database.password%

	services:

		authenticator: Authenticator()

		robotLoader:
			run: true

		database: @Nette\Database\Connection

		homeModel:
			class: HomeModel
			arguments: [@database]


production < common:
	services:
		database:
			class: Nette\Database\Connection
			arguments: [...]
development < common:
	parameters:
		database:
			driver: mysql
			host: localhost
			dbname: mydb
			user: root
			password:

Dale pak bootstrap.php na:

<?php

use \Nette\Diagnostics\Debugger,
    \Nette\Application\Routers\Route,
    \Nette\Application\Routers\RouteList;

require __DIR__ . '/../libs/nette.min.php';

Debugger::$logDirectory = __DIR__ . '/../log';
Debugger::$strictMode = TRUE;
Debugger::$email = 'my@mail.cz';
Debugger::enable();

$params['libsDir'] = __DIR__ . '/../libs';

$configurator = new Nette\Config\Configurator;

$configurator->addParameters($params);
$configurator->setTempDirectory(__DIR__ . '/../temp');
$configurator->createRobotLoader()
        ->addDirectory(__DIR__)
        ->addDirectory(__DIR__ . '/../libs')
        ->register();
$container = $configurator->createContainer();

$configurator->addConfig(__DIR__ . '/config.neon');

//ROUTY
$container->router = $router = new RouteList;
$router[] = new Route('index.php', 'Front:Homepage:default', Route::ONE_WAY);

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

$router[] = $frontRouter = new RouteList('Front');
$frontRouter[] = new Route('<lang (cz|en|fr|de|it|es)>/<presenter>/<action>', array(
            'lang' => 'cz',
            'presenter' => 'Homepage',
            'action' => 'default'
        ));

$application = $container->application;
$application->errorPresenter = 'Front:Error';
$application->catchExceptions = \Nette\Environment::isProduction();
$application->run();

Kdyz pak ale chci v BasePresenteru model pomoci $this->context->homeModel->... ve startup(), tak mi to vyhodi danou chybu Service ‚homeModel‘ not found.

Prosim o radu, proc a jak to opravit. Diky

Michal Vyšinský
Člen | 608
+
0
-

Myslím si, že bude stačit smazat cache. Možná by měl být ještě tento řádek:

$configurator->addConfig(__DIR__ . '/config.neon');

před tímto řádkem:

$container = $configurator->createContainer();
Ot@s
Backer | 476
+
0
-

Dumpni si v BasePresenteru obsah $this->context a koukni se do temp/cache/_Nette.Configurator/*.php. Figuruje tam někde homeModel?

simPod
Člen | 383
+
0
-

@CherryBoss: smazal jsem cache a presunul dany radek. Ted mam chybu v bootstrap.php Class and factory are missing in service 'robotLoader' definition. Robotloader se ted ale vytvari v Bootstrapu ne?

@Ota@s: diky, tusim ze bych nejdrive mel zacit tim, co psal CherryBoss, mozna pak v $this->context ani chyba nebude

diky

Michal Vyšinský
Člen | 608
+
0
-

Tak v pořadí řádků asi chyba nebude. Ostatní služby ze sekce „services“ ti fungují?

Možná přece jen bude chyba v tom pořadí řádků. Změň to jak jsem psal a z config.neon oddělej tu definici robotLoaderu – to tam myslím být nemusí (já to tam nemám a vše mi jede)

Editoval CherryBoss (29. 2. 2012 12:50)

Ot@s
Backer | 476
+
0
-

Inspiruj se Davidovýma instukcema (hlavně co se týče robotloaderu).

simPod
Člen | 383
+
0
-

hm, tak ten robotloader to byl. Mel jsem za to, ze jsem ho smazal… Diky moc