Nefunkční callback v továrničce

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

Ahoj, mám továrničku, která mi vytváří formulář pro ukládání nových záznamů a editaci těch stávajících. Pokud ukládám nový záznam, je vše cajk, pokud chci uložit změněný záznam, stejně se použije callback pro ukládání – i když mám ošetřeno IF za jakých podmínek se má vzít ten či onen callback. Včem by mohla být chybka? :-)

<?php
public function createComponentPpzForm()
    {
        $form = new AppForm();
        $form->addText('ppz_firstname', 'Křestní jméno*:')
             ->addRule(Form::FILLED, 'Uveďte křestní jméno.');
        $form->addText('ppz_lastname', 'Příjmení*:')
             ->addRule(Form::FILLED, 'Uveďte příjmení');
        $form->addText('ppz_email', 'Email*:')
             ->addRule(Form::EMAIL, 'Zadaný email nemá správný formát.');
        $form->addSelect('ppz_status', 'Status', array('1'=>'Povolený vstup', '0'=>'Odepřený vstup'));
        $form->addPassword('ppz_password', 'Heslo*:');
        $form->addPassword('ppz_password2', 'Heslo znovu*:')
             ->addRule(Form::EQUAL, 'Zadané hesla se neshodují', $form['ppz_password']);
        $form->addSubmit('cancel', 'Ukončit editor')
                 ->setValidationScope(FALSE);
        /*
         * Pokud form bude v rezimu editace
         */
        if(Environment::getHttpRequest()->getQuery('ppz-command') == "editPpz"){
            $form->addSubmit('send', 'Uložit změny');
            $form->onSubmit[] = callback($this, 'processUpdatePpz');
            /*
             * Naplneni poli
             */
            $data = PpzModels::LoadPpzId(Environment::getHttpRequest()->getQuery('ppz-ppz_id'));
            $form->setDefaults($data['0']);
            /*
             * V rezimu zadavani
             */
        } else {
            $form->addSubmit('send', 'Uložit');
            $form->onSubmit[] = callback($this, 'processSaveNewPpz');
        }

        return $form;
    }
?>
RDPanek
Člen | 189
+
0
-

Zajímavý, pokud kod doplnim o Debug::barDump:

<?php
	/*
         * Pokud form bude v rezimu editace
         */
        if(Environment::getHttpRequest()->getQuery('ppz-command') == "editPpz"){
            $form->addSubmit('send', 'Uložit změny');
            $form->onSubmit[] = callback($this, 'processUpdatePpz');
            /*
             * Naplneni poli
             */
            $data = PpzModels::LoadPpzId(Environment::getHttpRequest()->getQuery('ppz-ppz_id'));
            $form->setDefaults($data['0']);
	    Debug::barDump("editace");
            /*
             * V rezimu zadavani
             */
        } else {
            $form->addSubmit('send', 'Uložit');
            $form->onSubmit[] = callback($this, 'processSaveNewPpz');
	    Debug::barDump("ulozeni");
        }

?>

Kliž natahuji form pro editaci, barDump vypíše „editace“, upravím nějakou položku a dám Uložit, tak barDump vypíše „ulozeni“ :-(

melnenStig
Člen | 8
+
0
-

mam problem s tim ze mi nefunguje callback v komponente, tu vytvarim nejak takto

<?php
public function createComponentAdminContent(){
      return new AdminContent;
}
?>

AdminContent vypada nejak takto

<?php
class AdminContent extends NControl
{
   public function render(Content $content){

      $form = new NAppForm;
      $form->addText('name');
      $form->addTextArea('content');

      $form->addSubmit('save', 'Uložit');
      $form->addSubmit('delete', 'Smazat');

      $form->addHidden('content_id', $content->content_id);

      $form->setDefaults(array(
          'name' => $content->name,
          'content' => $content->content,
      ));

      $form->onSuccess[] = callback($this, 'editFormSubmitted');

      echo $form;
}

   public function editFormSubmitted(NAppForm $form){
	//toto se neprovede :/
      	$this->redirect('Homepge:Default');
   }
}
?>

uz sem fakt zoufaly a nevim co s tim :/
NetteFramework-2.0beta-PHP5.2

nemeli by ste nejakou radu?

Editoval melnenStig (10. 7. 2011 14:35)

melnenStig
Člen | 8
+
0
-

tak reseni meho problemu jsem nasel zde https://forum.nette.org/…-zadnou-akci ale zase nejde redirect :D

Jan Voráček
Člen | 90
+
0
-

Gaudentius napsal(a):

Kliž natahuji form pro editaci, barDump vypíše „editace“, upravím nějakou položku a dám Uložit, tak barDump vypíše „ulozeni“ :-(

Protože po odeslání formuláře zmizí z query ‚ppz-ppz_id‘. Přeposílej si tu informaci ke zpracování třeba ve skrytym poli nebo jako persistentní parametr presenteru.

melnenStig napsal(a):

ale zase nejde redirect :D

Zkus použít $this->presenter->redirect();