CHYBA : Call to a member function table() on a non-object

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

Ahojte,

prosím o pomoc, lebo neviem prist na to kde mam chybu.

CHYBA : Call to a member function table() on a non-object

<?php

namespace App\Presenters;

use Nette;
use App\Model;
use Nette\Application\UI;
use Nette\Http\Session;
use Nette\Application\UI\Form;
use Nette\Mail\SendmailMailer;
use Nette\Mail\Message;

/**
 * Base presenter for all application presenters.
 */

abstract class BasePresenter extends Nette\Application\UI\Presenter
{

    /** @var Nette\Http\Session */
    private $session;

    /** @var Nette\Http\SessionSection */
    private $sessionSection;

    /** @var Nette\Database\Context */
    private $database;

    public function __construct(Nette\Http\Session $session, Nette\Database\Context $database)
    {
        $this->session = $session;

        $this->sessionSection = $session->getSection('mySection');

        $this->database = $database;
    }

    /** @var \App\Forms\ContactFormFactory @inject */
    public $contactForm;

    /**
     * Contact form factory.
     * @return Nette\Application\UI\Form
     */

    public function beforeRender() {
        $sess = $this->getSession('session');

        $wordsW = $this->database->table($sess->words);   ==> CHYBA
        $this->template->wordW = $wordsW;
David Matějka
Moderator | 6445
+
+2
-

V konkrétním presenteru asi prepisujes konstruktor. V base presenteru použij raději inject anotace

Takeshi
Člen | 596
+
0
-

David Matějka napsal(a):

V konkrétním presenteru asi prepisujes konstruktor. V base presenteru použij raději inject anotace

Pardon … zabudol som pridat konstruktor … a teda ako by som to mal zmenit?? Dakujem

/** @var Nette\Http\Session */
private $session;

/** @var Nette\Http\SessionSection */
private $sessionSection;

/** @var Nette\Database\Context */
private $database;

public function __construct(Nette\Http\Session $session, Nette\Database\Context $database)
{
    $this->session = $session;

    // a získáme přístup do sekce 'mySection':
    $this->sessionSection = $session->getSection('mySection');

    $this->database = $database;
}
CZechBoY
Člen | 3608
+
+1
-

V BasePresenteru použij @inject anotaci:

class BasePresenter extends UI/Presenter
{
	/** @var Nette\Database\Context @inject */
	public $database;
}

Potom v nějakém poděděném presenteru:

class ArticlePresenter extends BasePresenter
{
	public function actionDefault ()
	{
		$this->database->table('abc'); // už tu mám $this->database
	}
}

btw session už v presenteru je – není potřeba vyžadovat.
btw používej zvýrazňovač php kodu na foru
/--php
class BasePresenter {}
\--