Logování – problém s přístupem do databáze
- dj.kure
- Člen | 70
Ahoj,
řeším tu takový problém, rozhodl jsem se ve své miniaplikaci logovat
veškeré úkony, které uživatel udělá.
Vytvořil jsem v BasePresenteru funkci logEvent(), která vypadá takto:
// vlastni logovani udalosti
public function logEvent($event = null, $type = 'info')
{
$data = array();
$data['datum'] = date('Y-m-d H:i:s');
$data['nick'] = $this->user->identity->data['nick'];
$data['typ'] = $type;
$data['sekce'] = $this->getName() . ":" . $this->getAction() . (isset($id) ? ":" . $id : "");
$data['udalost'] = $event;
$this->database->table('log')->insert($data);
}
Mám ale problém s tím, že když jsem v jiném modelu, než základním, kde se BasePresenter nachází, tak mi Nette vyhazuje tuhle chybu:
Call to a member function table() on a non-object
a poukazuje na
následující řádek té logovací funkce:
$this->database->table('log')->insert($data);
Přitom v konstruktoru daného presenteru přístup do databáze mám :-(
Co dělám špatně? Neznám Nette příliš do hloubky, takže určitě něco opomíjím. Děkuji za rady.
Editoval dj.kure (25. 5. 2016 12:55)
- dj.kure
- Člen | 70
Když přidám do presenteru, kde logování potřebuji do konstruktoru toto:
parent::__construct();
Tak mi pro změnu začne hlásit nette toto:
Argument 1 passed to App\Presenters\BasePresenter::__construct() must be an instance of Nette\Database\Context, none given...
a odkazuje na BasePresenter takto:
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
/** @var User @inject */
public $user;
/** @var Nette\Database\Context */
private $database;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
...
řádek „public function“…
Editoval dj.kure (25. 5. 2016 13:34)