Component with name ‚userEdit‘ does not exist
- Jack06
- Člen | 168
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
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
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
Mno zkusil jsem to udělat přes tu šablonu, kterou to tahá, ale nejde mi to vytvořit jak bych potřeboval…
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
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.