Formuláře- výchozí hodnoty

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

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
+
0
-

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)

Taufic
Člen | 31
+
0
-

Strašně moc děkuji, už funguje. :)