Nette\Application\UI\BadSignalException #403 po odoslani formulára
- Sator
- Člen | 15
Nette Framework 2.0.8
Mám formulár na ktorom mám new/edit položky. Pri vytváraní novej položky,
nieje problém všetko prebehne bez problémov. Pri edite ale hodí:
Nette\Application\UI\BadSignalException #403
The signal receiver component ‚users‘ is not found.
Nemám v presentery žiadne action/render, čisto componeta, jej onSuccess a par iných component. Teda mi to osobne vychádza že je nejaký problém s dátami, ktoré dostal formulár pri tvorbe editu.
public function createComponentUsers(){
$users = new \Users;
$form = new UI\Form;
$form->addText('company', 'Obchodný názov:')
->addRule(Form::FILLED, 'Prosím zadaj obchodný názov firmy.');
$form->addText('street', 'Ulica:')
->addRule(Form::FILLED, 'Prosím zadaj ulicu.');
$form->addText('number', 'Číslo:')
->addRule(Form::FILLED, 'Prosím zadaj súpisné číslo.');
$form->addText('city', 'Mesto:')
->addRule(Form::FILLED, 'Prosím zadaj mesto.');
$form->addText('psc', 'PSČ:')
->addRule(Form::FILLED, 'Prosím zadaj PSČ.')
->addRule(Form::INTEGER, 'PSČ môže obsahovať iba čísla.')
->addRule(Form::LENGTH, 'PSČ musí obsahovať %d znakov.', 5);
$form->addText('ico', 'IČO:')
->addRule(Form::FILLED, 'Prosím zadaj IČO.')
->addRule(Form::INTEGER, 'IČO môže obsahovať iba čísla.')
->addRule(Form::LENGTH, 'IČO musí obsahovať %d znakov.', 8);
$form->addText('website', 'Webstránka tvojej donáškovej služby:')
->addRule(Form::FILLED, 'Prosim zadaj webstránku svojej donáškovej služby.')
->addRule(Form::URL, 'Zadaj platnú URL adresu.');
$form->addText('username', 'Login:')
->addRule(Form::FILLED, 'Prosím zadaj login.')
->addRule(Form::EMAIL, 'Login musí byť platný email.');
if($this->getParameter('action')=='new'){
$form->addPassword('password', 'Heslo:')
->addRule(Form::FILLED, 'Prosím zadaj heslo.')
->addRule(Form::MIN_LENGTH, 'Heslo musí byť aspoň %d znakov dlhé', 5);
$form->addPassword('cpassword', 'Potvrď heslo:')
->addRule(Form::FILLED, 'Prosím potvrď heslo.')
->addRule(Form::EQUAL, 'Hesla sa nezhodujú.', $form['password']);
}else{
$form->addPassword('password', 'Heslo:')
->addConditionOn($form['password'], Form::FILLED)
->addRule(Form::MIN_LENGTH, 'Heslo musí byť aspoň %d znakov dlhé', 5);
$form->addPassword('cpassword', 'Potvrď heslo:')
->addConditionOn($form['password'], Form::FILLED)
->addRule(Form::FILLED, 'Prosím potvrď heslo.')
->addRule(Form::EQUAL, 'Hesla sa nezhodujú.', $form['password']);
}
$form->addSelect('role', 'Typ:', $users->roles)
->addRule(Form::FILLED, 'Prosím zadaj obchodný názov firmy.');
$form->addTextArea('comment', 'Poznámka:');
$table = 'users';
if($this->getParameter('action')!='new'){
if($this->getParameter('action')=='edit')
$table = 'users';
elseif($this->getParameter('action')=='editReg')
$table = 'registrations';
$data = $users->getData($table, $this->getParameter('id'), true);
$form->setDefaults($data);
}
$form->addHidden('table', $table);
$form->addHidden('action', $this->getParameter('action'));
$form->addHidden('id', $this->getParameter('id'));
$form->addSubmit('send', 'Odoslať');
$form->onSuccess[] = $this->usersSucceeded;
return $form;
}
- pepakriz
- Člen | 246
Tipoval bych, že továrnička během procesu vytváření havaruje a tudíž
se komponenta řádně nevytvoří ⇒ proto hlásí, že komponenta
users
neexistuje. Viz: https://api.nette.org/…ter.php.html#307
- castamir
- Člen | 629
zkus tohle
$users = new \Users;
//...
$table = 'users';
if($this->getParameter('action')!='new'){
if($this->getParameter('action')=='edit')
$table = 'users';
elseif($this->getParameter('action')=='editReg')
$table = 'registrations';
$data = $users->getData($table, $this->getParameter('id'), true);
$form->setDefaults($data);
}
přepsat do patřičných action metod (edit a editReg) např. nějak takto:
public function actionEdit($id) {
$users = new \Users;
$data = $users->getData("users", $id, true);
if (!is_array($data)) { // nevim, co vracis, ale setDefaults pozaduje pole nebo neco, co si to pole umi vytvorit
throw new \Nette\Application\ForbiddenRequestException;
}
$this['users']->setDefault($data);
}
Editoval castamir (26. 1. 2013 12:14)
- Sator
- Člen | 15
Skusal som to debuggovat a vzdy ked som v componente dal $form->setDefaults($data) alebo $form->setValues($data) to padlo po submite.
Takze som to prerobil tak ze som spravil action pre oba edity a tam do templatu davam data a v template davam $form->setDefaults($data)
Toto riesenie sice funguje, ale bol som zvyknuty to riesit v componente. Tento web mam ako prvy na nette 2.0.8, zeby sa zmenilo nieco co to crashuje?