Call to a member function getByType() on a non-object
- kozusnik
- Člen | 10
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
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)
- Vojtěch Dobeš
- Gold Partner | 1316
kozusnik Klidně se dál ptej, jen hesla není úplně třeba přidávat :).