Nelze vytvořit instanci Nette\Database\Connection
- James_Scott
- Člen | 55
V config. neon mám toto:
common:
php: # PHP configuration
date.timezone: Europe/Prague
# session.save_path: „%tempDir%/sessions“
# zlib.output_compression: yes
heslo: xxx
services:
robotLoader:
run: true
database:
class: Nette\Database\Connection
arguments: [‚mysql:host=localhost;dbname=test‘, ‚root‘, %heslo%]
methods: [
[setCacheStorage, [@cacheStorage]],
]
authenticator:
class: Nette\Security\SimpleAuthenticator
arguments: admin
news: News
production < common:
development < common:
console < common:
A mám model, ve kterém chci přistupovat do databáze.
class news extends Nette\Object {
/** @var Nette\Database\Connection */
public $database;
public function __construct(Nette\Database\Connection $database)
{
$this->database = $database;
}
function create($name, $message)
{
$this->database->table('news')->insert(array(
'name' => $name,
'create_date' => new DateTime,
'message' => $message,
));
}
Když si zavolám v presenteru metodu create
$this->context->news->add($values->name, $values->message);
Tak mi to vrátí chybu : Argument 1 passed to news::__construct() must be an instance of Nette\Database\Connection, none given.
Nemůžu za boha zjistit, proč se mi nevytváří ta instance.
- Petr Mašát
- Člen | 101
Hoj,
při vytváření třídy news musíš poslat z presenteru i na jakou
databázi se má napojit. Např. pomocí:
<?php
$news = new news($this->context->database);
?>
Stejný problém jsem také řešil :
)
Jinak názvy class se běžně píší na začátku velkým písmenem.
pm*
Editoval tachyon (25. 10. 2011 12:42)
- bojovyletoun
- Člen | 667
proboha! takhle jsi celé DI zabil!
Myslel jsi to asi konfigurovat pěkně v configu,že?
services:
news:
class: News
arguments:
- @database
- James_Scott
- Člen | 55
Ze zacatku jsem pouzil tu variantu vyse bez DI, pozdeji kdyz jsem se zacal trosku orientovat v Nette a celkove v OOP, tak pouzivam variantu uzivatele 22.