Zpracování formuláře – problém s podmínkami

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

Ahoj vespolek,
delší dobu řeším problém se zpracování formuláře. Už z toho mám hlavu v pejru ale prostě nevím.
Odesílám data z formuláře. Nejprve se zkontroluje jestli existuje ID. Pokud ne, volá se metoda k vytvoření. Pokud ano, volá se metoda k editaci.
Form:

	protected function createComponentEvidenceForm(){
$id = $this->id;
$zaznam = $this->evidenceRepository->findAll()->where('id', $id)->fetch();
$zakaznik = $this->zakaznikRepository->findAll()->fetchPairs('id', 'nazevSpolecnosti');

$provozovna = $this->provozovnaRepository->findAll()->where('obsazena',False)->fetchPairs('id', 'nazev');
$provozovnaAct = $this->provozovnaRepository->findAll()->where('id',$zaznam['provozovna_id'])->fetchPairs('id','nazev');
$provozovnaSelect = Arrays::mergeTree($provozovnaAct, $provozovna);


$router = $this->routerRepository->findAll()->where('umisten',False)->fetchPairs('id','evidencniCislo');
$routerAct = $this->routerRepository->findAll()->where('id',$zaznam['router_id'])->fetchPairs('id','evidencniCislo');
$routerSelect = Arrays::mergeTree($routerAct, $router);


//dump($provozovnaSelect);
$protokol = $this->protokolRepository->findAll()->fetchPairs('id','cislo');
 $datum = new DateTime();
 $form = new EvidenceForm();

  $form['zakaznik_id']->setItems($zakaznik);
  $form['provozovna_id']->setItems($provozovnaSelect);
  $form['router_id']->setItems($routerSelect);
  $form['protokol_id']->setItems($protokol);


 $form->addHidden('id')->setDefaultValue($id);
 if($id!==null){


  $form['zakaznik_id']->setDefaultValue($zaznam['zakaznik_id']);
  $form['provozovna_id']->setValue($zaznam['provozovna_id']);


  $form['router_id']->setDefaultValue($zaznam['router_id']);
  $form['datumZahajeni']->setDefaultValue($zaznam['datumZahajeni']);
  $form['datumUkonceni']->setDefaultValue($zaznam['datumUkonceni']);


$form->addSubmit('submit','Upravit záznam')->getControlPrototype()
         ->class('ajax');

         }else{
         $form['datumZahajeni']->setDefaultValue($datum);
           $form->addSubmit('submit','Přidat záznam')->getControlPrototype()
         ->class('ajax');
}

   $form->onSuccess[] = callback($this, 'akceEvidence');
return $form;
}

public function akceEvidence(EvidenceForm $form){

   $values = $form->getValues();
  $userId = $this->context->user->getIdentity()->id;
   if($values['id'] == NULL){
          $this->evidenceRepository->novyZaznam($userId,$values);
          $this->predavkaRepository->novaPredavka($values);
          $this->provozovnaRepository->zmenStav($values['provozovna_id']);
          $this->routerRepository->zmenStav($values['router_id']);
           $this->flashMessage('Záznam '.$values['id'].' byl přidán');

   }else{
      $evidence = $this->evidenceRepository->findAll()->where('id',$values['id'])->fetch();

          if ($evidence['router_id'] !== $values['router_id']) {
                $this->routerRepository->zmenStav($evidence['router_id']);
                $this->routerRepository->zmenStav($values['router_id']);
                }

         if ($evidence['provozovna_id'] !== $values['provozovna_id']) {
           $this->provozovnaRepository->zmenStav($evidence['provozovna_id']);
           $this->provozovnaRepository->zmenStav($values['provozovna_id']);
           }


     $this->predavkaRepository->upravitPredavku($values);
     $this->evidenceRepository->upravaZaznamu($userId,$values);
     $this->flashMessage('Záznam '.$values['id'].' byl upraven');
   }

$form->setValues(array(), TRUE);

     if(!$this->isAjax()){
 $this->redirect('this');
}



}

Pokud zakládám nový, je vše v pořádku. Pokud ale edituji nastává problém.
Ve formuláři je několik polí, ale zde jsou důležitá dvě:
router_id
provozovna_id
Pokud se jedno nebo druhé změní, provedou se určité metody.
Pokud změní obě dvě, není problém. Pokud změní jenom jednu z nich, nedoběhne vše až dokonce.

Pokud by v tom někdo viděl vyloženě chybu na první pohled, budu rád za echo.

Díky
Jirka

Vajalit
Člen | 11
+
0
-

Tak problém bude zde:

$provozovna = $this->provozovnaRepository->findAll()->where('obsazena',False)->fetchPairs('id', 'nazev');
$provozovnaAct = $this->provozovnaRepository->findAll()->where('id',$zaznam['provozovna_id'])->fetchPairs('id','nazev');
zde---> $provozovnaSelect = Arrays::mergeTree($provozovnaAct, $provozovna);


$router = $this->routerRepository->findAll()->where('umisten',False)->fetchPairs('id','evidencniCislo');
$routerAct = $this->routerRepository->findAll()->where('id',$zaznam['router_id'])->fetchPairs('id','evidencniCislo');
zde---> $routerSelect = Arrays::mergeTree($routerAct, $router);

Pokud tam hodím pouze $router a $provozovna tak všechno šlape.
Nemá někdo nějaký nápad?