Component with name ‚userEdit‘ does not exist

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

Dobrý den, chci se zeptat, proč mi nefunguje toto:

<?php
class Back_UserControlPresenter extends Admin_SecuredPresenter {

   public function createComponentAddUserForm() {

        $form = new BaseForm($this, 'addUserForm');

        $form->addGroup('Základní informace');

        $form->addText('name', 'Jméno:')
             ->addRule(Form::FILLED, 'Musíte vyplnit jméno klienta');
        $form->addText('surname', 'Příjmení:')
             ->addRule(Form::FILLED, 'Musíte vyplnit příjmení klienta');
        $form->addText('address', 'Adresa:')
             ->addRule(Form::FILLED, 'Musíte vyplnit adresu klienta');
        $form->addText('psc', 'PSČ:')
             ->addRule(Form::FILLED, 'Musíte vyplnit PSČ klienta');

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

        $renderer = $form->getRenderer();
        $renderer->wrappers['controls']['container'] = 'table id="regForm"';
        $renderer->wrappers['pair']['container'] = 'tr';
        $renderer->wrappers['label']['container'] = 'th';
        $renderer->wrappers['control']['container'] = 'td';

        $form->onSubmit[] = array($this, 'formAddUserSubmitted');

        return $form;
   }


   public function createComponentUserEdit($id)
   {
        $form = $this->createComponentAddUserForm();
        //$form->setDefaults(UsersModel::getUserData($id));
        $form->onSubmit = array();
        $form->onSubmit[] = array($this, 'editUserFormSubmitted');

        return $form;
   }

  public function formAddUserSubmitted(BaseForm $form){
                try {
                        UsersModel::newUser($form->values);
                        $this->presenter->flashMessage('Přidání nového klienta proběhlo úspěšně');
                        $this->presenter->redirect(':Back:UserControl:default');
                } catch(InvalidStateException $e){
                        $this->presenter->flashMessage($e->getMessage(),"warning");
                        $this->presenter->redirect(':Back:UserControl:default');
                }
  }

}
?>

Jakmile chci z té komponenty nové (editace) vyvolat komponentu, kterou již mám a chci ji pouze doplnit o údaje z databáze, tak mi to nahlásí, že komponenta neexistuje.. když tam hodím zase všechno jako na nový formulář, tak se zobrazí a nevím co s tím, díky

sodae
Nette Evangelist | 250
+
0
-

myslím že už registruješ tu komponentu:
$form = new BaseForm($this, 'addUserForm');

Jack06
Člen | 168
+
0
-

Mno ale template mám tento a v něm vůbec s tou komponentou co si jakoby vyvolávám k dodání dat nepracuju:

{block content}

{widget userEdit}

sodae napsal(a):

myslím že už registruješ tu komponentu:
$form = new BaseForm($this, 'addUserForm');

sodae
Nette Evangelist | 250
+
0
-

nj, udělal jsem si test a fakticky nejde přeregistrovat.

pak máš takovou možnost

využít parametr ve továrničce ($name)

   public function createComponentAddUserForm($name) {

        $form = new BaseForm($this, $name);


....
   public function createComponentUserEdit($name)
   {
        $form = $this->createComponentAddUserForm($name);

a taky nemůžeš volat nějaké ID viz ComponentContainer:177 pokud nemáš vlastní továrničku

redhead
Člen | 1313
+
0
-

Já vidím problém v tom, že vytváříš jednu komponentu, kterou pak chceš použít pro jinou. Volání createComponent*() by ses měl vyhnout. V tvém případě je lepší si udělat metodu createUserForm (ne createComponent), která vytvoří jenom prototyp, a tu pak využít v obou továrničkách:

public function createUserForm() {

        $form = new BaseForm();

        $form->addGroup('Základní informace');

        //...

        return $form;
   }


   public function createComponentAddUser()
   {
        $form = $this->createUserForm();

        $form->onSubmit[] = array($this, 'formAddUserSubmitted');

	return $form;
   }


   public function createComponentUserEdit()
   {
        $form = $this->createUserForm();
        //$form->setDefaults(UsersModel::getUserData($id));
        $form->onSubmit[] = array($this, 'editUserFormSubmitted');

        return $form;
   }

Editoval redhead (9. 8. 2010 18:47)

Jack06
Člen | 168
+
0
-

Mno zkusil jsem to udělat přes tu šablonu, kterou to tahá, ale nejde mi to vytvořit jak bych potřeboval…

Zde zdroják

když udělám změnu z:

<?php
$form = new BaseForm($this, $name);
?>

na

<?php
$form = new BaseForm(null, $name);
?>

nebo na

<?php
$form = new BaseForm();
?>

tak to funguje, ale nevytvoří se id formuláře pro LiveFormValidation…

redhead
Člen | 1313
+
0
-

Měl bys použít jméno posílané továrničce:

public function createComponentUserAdd($name) {
	$form = $this->createUserForm($name);

To samé s editem (máš tam totiž nekonzistenci v userAdd (metoda) vs. addUserForm (název formu) – ty 2 by měli být totožné.

v create metodě nech BaseForm($this, $name) mělo by to jít.

Jack06
Člen | 168
+
0
-

Jo super to už funguje díky..

Editoval Jack06 (9. 8. 2010 22:15)