Formuláře- výchozí hodnoty
- Taufic
- Člen | 31
Zdravím, předem se všem omlouvám, že vás takhle otravuji.
V nette začínám a nemůžu se dopídit toho, proč mi nefunguje formulář
pro editaci záznamu. Používám niftygrid a vytvořil jsem si tabulku
s tlačítkem editace, která mě přesměruje na editační formulář
s předvyplněnými hodnotami, které si člověk změní a pak tlačítkem
potvrdí. Nejde mi do hlavy to, že mám vytvořený objekt, ze kterého se
natahají defaultní data do toho formuláře (to funguje a kupodivu
i správně), ale jen co chci potvrdit a odeslat formulář, tak mě najednou
laděnka napíše Trying to get property of non-object a odkáže na ty
výchozí hodnoty.
Mohl by mě prosím někdo nasměrovat, co dělám špatně?
<?php
use NiftyGrid\NDataSource;
use \NiftyGrid\Grid;
use Nette\Application\UI\Form;
/**
* EditPcPresenter
*/
class EditPcPresenter extends BasePresenter
{
private $interniCislo;
private $pocitac;
private $pocitace;
private $typPcRepository;
private $uzivateleTypRepository;
private $uzivateleRepository;
private $mistnostRepository;
private $objektRepository;
public function renderDefault($interniCislo)
{
$this->template->interniCislo = $interniCislo;
$this->interniCislo= $interniCislo;
$this->pocitac= $this->pocitace->findBy(array('interniCislo' => $this->interniCislo))->fetch();
}
protected function startup()
{
parent::startup();
$this->uzivateleRepository = $this->context->uzivateleRepository;
$this->mistnostRepository = $this->context->mistnostRepository;
$this->objektRepository = $this->context->objektRepository;
$this->typPcRepository = $this->context->typPcRepository;
$this->uzivateleTypRepository = $this->context->uzivateleTypRepository;
$this->pocitace = $this->context->pocitaceRepository;
}
protected function createComponentEditPcForm()
{
$objekty= $this->objektRepository->findAll()->fetchPairs('id', 'nazev');
$mistnosti= $this->mistnostRepository->findAll()->fetchPairs('id', 'nazev');
$uzivatele= $this->uzivateleRepository->findAll()->fetchPairs('id', 'prihlasovaciJm');
$typyPc= $this->typPcRepository->findAll()->fetchPairs('id','nazev');
$form = new Form();
$form->addText('evidencniCislo', 'Evidenční číslo:', 40, 100)
->addRule(Form::FILLED, 'Je nutné zadat evidenční číslo.');
$form->addText('inventarniCislo', 'Inventární číslo:', 40, 100)
->addRule(Form::FILLED, 'Je nutné zadat inventární číslo.');
$form->addText('nabyvajiciDoklad', 'Nabývajcí doklad:', 40, 100)
->addRule(Form::FILLED, 'Je nutné zadat nabývající doklad.');
$form->addText('fakturaDodavatele', 'Faktura dodavatele:', 40, 100)
->addRule(Form::FILLED, 'Je nutné zadat fakturu dodavatele.');
$form->addSelect('objekt', 'Objekt:', $objekty)
->setPrompt('- Vyberte -')
->addRule(Form::FILLED, 'Je nutné vybrat objekt.');
$form->addSelect('mistnost', 'Místnost:', $mistnosti)
->setPrompt('- Vyberte -')
->addRule(Form::FILLED, 'Je nutné vybrat místnost.');
$form->addSelect('typPc', 'Typ počítače:', $typyPc)
->setPrompt('- Vyberte -')
->addRule(Form::FILLED, 'Je nutné vybrat typ počítače.');
$form->addText('popis', 'Popis:', 40, 100)
->addRule(Form::FILLED, 'Je nutné zadat popis počítače.');
$form->addSelect('uzivatel', 'Uživatel:', $uzivatele)
->setPrompt('- Vyberte -')
->addRule(Form::FILLED, 'Je nutné zadat uživatele.');
$form->addDatePicker('porizeni', 'Datum pořízení:')
->addRule(Form::FILLED, 'Je nutné zadat datum pořízení.')
->addRule(Form::VALID, 'Datum pořízení není ve správném formátu.');
$form->addText('zaruka', 'Záruka:', 40, 100)
->addRule(Form::FILLED, 'Je nutné zadat délku záruky.')
->addRule($form::INTEGER, 'Délka záruky musí být celé číslo.');
$form->addText('poznamka', 'Poznámka:', 40, 100)
->addRule(Form::FILLED, 'Je nutné zadat poznámku.');
$form->addText('mac', 'Mac adresa:', 40, 100)
->addRule(Form::FILLED, 'Je nutné zadat mac adresu.');
$form->addText('ip', 'Ip:', 40, 100)
->addRule(Form::FILLED, 'Je nutné zadat ip adresu.');
$form->addDatePicker('posledniAudit', 'Datum posledního auditu:')
->addRule(Form::VALID, 'Datum podledního auditu není ve správném formátu.');
$form->addSelect('auditUzivatel', 'Audit provedl:', $uzivatele)
->setPrompt('- Vyberte -');
$form->addText('auditPoznamka', 'Poznámka k auditu:', 40, 100);
$form->addSubmit('edit', 'Editovat');
$form['posledniAudit']->addConditionOn($form['auditPoznamka'], $form::FILLED)
->addRule($form::FILLED, 'Pro vložení auditu zadejte všechny potřebné údaje.') ;
$form['auditUzivatel']->addConditionOn($form['posledniAudit'], $form::FILLED)
->addRule($form::FILLED, 'Pro vložení auditu zadejte všechny potřebné údaje.');
//Blbne, nechází warning jako zprávu, ale jako odkaz v menu
$form['auditPoznamka']->addConditionOn($form['auditUzivatel'], $form::FILLED)
->addRule($form::FILLED, 'Pro vložení auditu zadejte všechny potřebné údaje.') ;
$form->setDefaults(array(
'evidencniCislo' => $this->pocitac->evidencniCislo,
'inventarniCislo' => $this->pocitac->inventarniCislo,
'nabyvajiciDoklad' => $this->pocitac->nabyvajiciDoklad,
'fakturaDodavatele' => $this->pocitac->fakturaDodavatele,
'popis' => $this->pocitac->popis,
'porizeni' => $this->pocitac->porizeni,
'zaruka' => $this->pocitac->zaruka,
'poznamka' => $this->pocitac->poznamka,
'mac' => $this->pocitac->adresaMac,
'ip' => $this->pocitac->adresaIp,
'posledniAudit' => $this->pocitac->posledniAudit,
'auditPoznamka' => $this->pocitac->auditPoznamka,
'objekt'=>$this->pocitac->objekt,
'mistnost'=> $this->pocitac->mistnost,
'typPc' => $this->pocitac->typPc,
'uzivatel' => $this->pocitac->uzivatel,
'auditUzivatel' => $this->pocitac->auditUzivatel
));
$form->onSuccess[] = $this->editPcFormSubmitted;
return $form;
}
public function editPcFormSubmitted(Form $form)
{
$this->pocitaceRepository->updatePc($this->interniCislo,$form->values->evidencniCislo, $form->values->inventarniCislo, $form->values->nabyvajiciDoklad,$form->values->fakturaDodavatele,$form->values->objekt,$form->values->mistnost,$form->values->typPc,$form->values->popis,$form->values->uzivatel,$form->values->porizeni,$form->values->zaruka,$form->values->poznamka,$form->values->mac,$form->values->ip,$form->values->posledniAudit,$form->values->auditUzivatel,$form->values->auditPoznamka);
$this->flashMessage('Počítač byl editován.', 'success');
$this->redirect('Homepage:');
}
}
?>
Editoval Taufic (24. 2. 2013 16:19)
- peter.z
- Člen | 37
pridaj actionDefault a tam pridaj aj tie udaje, ktore sa maju vlozit do formularu, v renderDefault ponechaj len vlozenie dat do sablony a setDefaults vymaz z tovarnicky na formular, t.j.:
public function actionDefault($interniCislo)
{
$this->interniCislo= $interniCislo;
$this->pocitac= $this->pocitace->findBy(array('interniCislo' => $this->interniCislo))->fetch();
$form->setDefaults(array(
'evidencniCislo' => $this->pocitac->evidencniCislo,
'inventarniCislo' => $this->pocitac->inventarniCislo,
'nabyvajiciDoklad' => $this->pocitac->nabyvajiciDoklad,
'fakturaDodavatele' => $this->pocitac->fakturaDodavatele,
'popis' => $this->pocitac->popis,
'porizeni' => $this->pocitac->porizeni,
'zaruka' => $this->pocitac->zaruka,
'poznamka' => $this->pocitac->poznamka,
'mac' => $this->pocitac->adresaMac,
'ip' => $this->pocitac->adresaIp,
'posledniAudit' => $this->pocitac->posledniAudit,
'auditPoznamka' => $this->pocitac->auditPoznamka,
'objekt'=>$this->pocitac->objekt,
'mistnost'=> $this->pocitac->mistnost,
'typPc' => $this->pocitac->typPc,
'uzivatel' => $this->pocitac->uzivatel,
'auditUzivatel' => $this->pocitac->auditUzivatel
));
}
public function renderDefault($interniCislo)
{
$this->template->interniCislo = $interniCislo;
}
Dalsiu vec co by som zmenil je to ziskavanie sluzieb z contextu.. skus sa pozriet na inject metody – https://pla.nette.org/…ect-autowire :)
Editoval peter.z (24. 2. 2013 21:46)