Call to a member function getByType() on a non-object

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

Dobrý den, Nette mi hážu výše zmíněnou chybu… sice jsem si četl tady dotaz na fóru, ale nijak jsem z toho chybu neodhalil.. můžete mi prosím pomoct?
HomePage presenter

<?php

/**
 * Homepage presenter.
 */
class HomepagePresenter extends BasePresenter
{
 private $connection;

function __construct(Nette\Database\Connection $connection)
  {
       $this->connection = $connection;
   }




}

BOOTSTRAP

<?php

/**
 * My Application bootstrap file.
 */
use Nette\Application\Routers\Route;

// Load Nette Framework
require LIBS_DIR . '/Nette/loader.php';


// Configure application
$configurator = new Nette\Config\Configurator;

$configurator->setTempDirectory(__DIR__ . '/../temp');

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

$container = $configurator->createContainer();


// nebo všem
$configurator->setDebugMode(); // = TRUE

$configurator->enableDebugger(__DIR__ . '/../log');

$configurator->createRobotLoader()
	->addDirectory(APP_DIR)
	->addDirectory(LIBS_DIR)
	->register();

// Setup router
$container->router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$container->router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');

// Configure and run the application!
$container->application->run();

/* ZPRACOVÁNÍ CHYB */

use Nette\Diagnostics\Debugger;

// Enable Nette Debugger for error visualisation & logging
Debugger::$logDirectory = __DIR__ . '/../log';
Debugger::$strictMode = TRUE;

//zapnuta ladenka
Debugger::enable(Debugger::DEVELOPMENT);



/* KONEC ZPRACOVÁNÍ CHYB */

CONFIG NEON

common:
	parameters:

	php:
		date.timezone: Europe/Prague
		# zlib.output_compression: yes


	nette:
		application:
			errorPresenter: Error

		session:
			expiration: 14 days

		database:
			default:
				dsn: 'mysql:host=xxxxxxxx;dbname=xxxxxxxx'
				user: 'xxxxxxxx'
				password: 'xxxxxxxx'
services:
	database:
		class: Nette\Database\Connection (
			'%database.driver%:host=%database.host%;dbname=%database.dbname%',
%database.user%, %database.password%, null,
Nette\Database\Reflection\DiscoveredReflection()
		)

	factories:


production < common:

development < common:

Zde ještě přikládám odkaz na screen obrazovky s chybou:
https://lh6.googleusercontent.com/…89/chyba.PNG

Editoval kozusnik (27. 9. 2012 18:28)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Zapomněl jsi volat konstruktor. Je pochopitelně třeba zachovat všechny závislosti originální třídy, viz API.

Pro injektáž databáze můžeš od verze 2.0.5 použít tzv. inject metody. Stačí přidat do presenteru metodu v této podobě. A bude ti sloužit úplně stejně jako by sis závislost předával v konstruktoru. Ten je u presenteru lepší nepřepisovat.

public function injectDatabase(Nette\Database\Connection $connection)
{
	$this->connection = $connection;
}

Instanci databáze nemusíš presenteru nikde předávat, Nette ji automaticky doplní pomocí autowiringu.

Editoval vojtech.dobes (27. 9. 2012 16:08)

voda
Člen | 561
+
0
-

Nezapomeň si pak změnit heslo do db :)

kozusnik
Člen | 10
+
0
-

díky vojtech.dobes, jede to. snad už další rady nebudu potřebovat :D

doprcic :D díky voda ;) změním :)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

kozusnik Klidně se dál ptej, jen hesla není úplně třeba přidávat :).

kozusnik
Člen | 10
+
0
-

vojtech.dobes no :D už jsem to upravil a hesla změnil :D zrovna zkouším přidávat na web komponenty… snad s tím nebude problém :)