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
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
V konkrétním presenteru asi prepisujes konstruktor. V base presenteru použij raději inject anotace
- Takeshi
- Člen | 596
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
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 {}
\--