Trying to get property of non-object
- Operanda
- Člen | 20
Logovani na stranky jsem si napsal primo do BasePresenteru:
<?php
$user = NEnvironment::getUser();
$this->uzivatel = $this->template->user = $user->isLoggedIn() ? $user->getIdentity() : NULL;
?>
Vsechny ostatni Presentery dedim z BasePresenteru. Pokud si v nejakym z techto prezenteru necham vypsat uzovatelovo id
<?php
echo $this->uzivatel->id;
?>
tak se hezky vypise. Problem je v tom, kdyz chci toto id priradit do nejake promenne:
<?php
$promenna = $this->uzivatel->id;
?>
vypise to hlasku:
Notice: Trying to get property of non-object in NejakyPresenter on line 25
Napadlo me ID po nalogovani ulozit do session a pracovat pak s ni, ale kdyz
uz je implementovany ono getIdentity() do $uzivatele, uplne by stacilo tahat to
id odtam.
Diky za radu.
- Jan Tvrdík
- Nette guru | 2595
$this->uzivatel->id
nemůžeš nikdy použít, protože
$this->uzivatel
může být NULL
. Správně je
např. $this->uzivatel ? $this->uzivatel->id : NULL
.
- Operanda
- Člen | 20
Mam pouze BasePresenter:
<?php
abstract class BasePresenter extends NPresenter
{
public $oldLayoutMode = FALSE;
protected $uzivatel;
protected function beforeRender()
{
$user = NEnvironment::getUser();
$this->uzivatel = $this->template->user = $user->isLoggedIn() ? $user->getIdentity() : NULL;
}
?>
a:
<?php
final class JinyPresenter extends BasePresenter
{
public function createComponentJizdaForm() {
$form = new NAppForm;
$form->addHidden('id', $this->uzivatel->id);
...
}
?>
nedela to jen v tomto formularovem prirazeni, ale take v obycejnem $promenna = $this->uzivatel->id;
- Jan Tvrdík
- Nette guru | 2595
Kdybys poctivě studoval dokumentaci, tak bys
věděl, že beforeRender
se vyhodnocuje až po zpracování
signálů (tj. po zavolání createComponentJizdaForm
). Tudíž
v době, kdy se volá createComponentJizdaForm
, tak
$this->uzivatel
je ještě NULL
.
- Jan Tvrdík
- Nette guru | 2595
Jak se v presenteru (popripade modelu) dostat k datum nalogovaneho uzivatele z getIdentity?
$this->getUser()->getIdentity()->getData();