Po submite formulara sa znovu vola createComponentXXX s hlaskou: Trying to get property of non-object
- siami
- Člen | 3
PHP 5.4.3 | Server Apache/2.4.2 (Win64) PHP/5.4.3 | Nette Framework 2.0.5
Po submite formulara sa znovu vola createComponentXXX s hlaskou: Trying to
get property of non-object
Chybova hlaska odkazuje na riadok: ‚$tmp = $uziv->name;‘ v metode
createComponent.
Viete poradit? Preco sa znova vola tato metoda?
<?php
/**
* Presenter,
*/
use Nette\Database\Connection;
use Nette\Forms;
use Nette\Application\UI\Form;
class UzivEditPresenter extends BasePresenter
{
private $repNast;
private $idUziv;
protected function startup()
{
parent::startup();
if (!$this->getUser()->isLoggedIn()) {
$this->redirect('Sign:in');
}
//authenticate - len admin - 1
if ($this->getUser()->getRoles()[0] != "admin")
$this->redirect('Homepage:');
$this->repNast = $this->context->nastaveniaRepository;
}
public function renderDefault($idUziv)
{
$this->idUziv = $idUziv;
}
protected function createComponentUzivEditForm()
{
$uziv = $this->repNast->Uzivatelia_getUser($this->idUziv);
$kateg = $this->repNast->Uzivatelia_getKateg()->fetchPairs('IdUzivKateg', 'MenoUzivKateg');
$tmp = $uziv->name;
$form = new Form();
$form->addText('tbMeno', 'Meno a priezvisko používateľa:', 20, 50)
->addRule(Form::FILLED, 'Je nutné zadať názov.')
->setDefaultValue($uziv->name);
$form->addSelect('cbKateg', 'Kategória:', $kateg)
->setPrompt('Zvoľte kategóriu')
->addRule(Form::FILLED, 'Je nutné vybrať, kategóriu.')
->setDefaultValue($uziv->XidUzivKateg);
$form->addText('tbUzivMeno', 'Používateľské meno:', 20, 50)
->addRule(Form::FILLED, 'Je nutné zadať názov.')
->setDefaultValue($uziv->username);
$form->addSubmit('btUlozit', 'Uložiť');
$form->addSubmit('btStorno', 'Zrušiť')
->setValidationScope(FALSE);
$form->onSuccess[] = $this->UzivEditFormSubmitted;
//$form->onSuccess[] = callback($this, 'taskFormSubmitted') - stara verzia
return $form;
}
//vola sa po uspesnom odoslani dat formulara
public function UzivEditFormSubmitted(Form $form)
{
//$this->repNast->MO_setNazov(1, $form->values->tbNazov);
$this->flashMessage('Zmena zapísaná.', 'success');
$this->redirect('dede:');
}
}
?>
- enumag
- Člen | 2118
To je jedna z nejdůležitějších věcí, co bys měl vědět o Nette, jde o životní cyklus presenteru.
V tvém případě šlo o to, že signál odeslání formuláře se
zpracoval dříve než metoda renderDefault a property
$this->idUziv
při volání createComponentUzivEditForm ještě
nebyla inicializována.
- siami
- Člen | 3
enumag napsal(a):
To je jedna z nejdůležitějších věcí, co bys měl vědět o Nette, jde o životní cyklus presenteru.
V tvém případě šlo o to, že signál odeslání formuláře se zpracoval dříve než metoda renderDefault a property
$this->idUziv
při volání createComponentUzivEditForm ještě nebyla inicializována.
Vsimol som si ten krasny obrazok. Podla tohto obrazku vsak, sablona sa spracovava az po ‚render<View>‘ a az tam sa prvykrat pouziva ‚UzivEditForm‘ (az teraz sa ma zavolat metoda ‚createComponentUzivEditForm()‘). Uvazujem spravne?