Odeslání formuláře se nedostane tam kam chci
- svobodai
- Člen | 136
Mám v presenteru nadefinovaný formulář a na onSuccess mám definovanou
funkci. Po odeslání formuláře se dostanu zpět do té části, která
vytváří formulář a ne do té definované funkce.
Do adresniho radku se prida ?do=categoryForm-submit
Co dělám špatně.
protected function createComponentCategoryForm() {
$form = new AppForm();
$form->addTextArea('category_text','Category text:',180,3)
->addRule(Form::FILLED, 'Category must be filled' );
$form->addTextArea('category_description', 'Description',180,10);
$form->addHidden('lang_id');
$form->addHidden('category_id');
(int)$tmpId = $this->id;
if ($tmpId == 0) {
Debugger::dump($tmpId);
$form->addHidden('test_id');
$form['test_id']->setDefaultValue($this->test_ident);
$form->addText('category_order','Order')
->addRule(Form::FILLED,'Category order must be filled')
->addRule(Form::INTEGER,'Category order must be number');
$labelSubmit = "Insert category";
}
else {
$tmp_labels = $this->categoryLabel->findBy(array('lang_id' => $this->lang, 'category_id' => $this->id))->select('*')->fetch();
$formData = array('category_text' => $tmp_labels['category_text'],
'category_description' => $tmp_labels['category_description'],
'lang_id' => $tmp_labels['lang_id'],
'category_id' => $tmp_labels['category_id']);
$form['category_text']->setDefaultValue($tmp_labels['category_text']);
$form['category_description']->setDefaultValue($tmp_labels['category_description']);
$form['category_id']->setDefaultValue($tmp_labels['category_id']);
$form['lang_id']->setDefaultValue($tmp_labels['lang_id']);
$labelSubmit = "Update category";
}
$form->addSubmit('submit', $labelSubmit);
$form->onSuccess[] = $this->categoryFormSubmitted;
return $form;
}
public function categoryFormSubmitted(AppForm $form) {
$this->presenter->flashMessage('Test vlozeni');
$values = $form->getValues();
Debugger::dump($values);
die;
}
- svobodai
- Člen | 136
Tak problém je v tom, že mám podmíněnou část, která se má vložit
do formu při insertu. Při updatu je nepotřebuju.
Ale je zajímavé, že data se mi načtou správně. Jen se mi do toho formu
propašuje Order a na jeho validaci to končí.
Jak docílit toho, když chci mít jeden formulář pro insert i update a jen
potřebuju nepracovat při updatu s tím jedním polem a tudíž ho nechci
validovat.
if ($tmpId == 0) {
Debugger::dump($tmpId);
$form->addHidden('test_id');
$form['test_id']->setDefaultValue($this->test_ident);
$form->addText('category_order','Order')
->addRule(Form::FILLED,'Category order must be filled')
->addRule(Form::INTEGER,'Category order must be number');
$labelSubmit = "Insert category";
}
else {
$tmp_labels = $this->categoryLabel->findBy(array('lang_id' => $this->lang, 'category_id' => $this->id))->select('*')->fetch();
$formData = array('category_text' => $tmp_labels['category_text'],
'category_description' => $tmp_labels['category_description'],
'lang_id' => $tmp_labels['lang_id'],
'category_id' => $tmp_labels['category_id']);
$form['category_text']->setDefaultValue($tmp_labels['category_text']);
$form['category_description']->setDefaultValue($tmp_labels['category_description']);
$form['category_id']->setDefaultValue($tmp_labels['category_id']);
$form['lang_id']->setDefaultValue($tmp_labels['lang_id']);
$labelSubmit = "Update category";
}
- Majkl578
- Moderator | 1364
Ideálně si asi udělat továrničku na nějaký base form (teď nemyslím továrničku ve smyslu továrničky komponenty, ale obecně) a pro každý druh si jej doupravit v příslušné továrně komponenty. Něco jako:
protected function createComponentAddCategoryForm()
{
$form = $this->createBaseCategoryForm();
// přidání dodatečných polí a callbacků do formuláře na přidání
return $form;
}
protected function createComponentEditCategoryForm()
{
$form = $this->createBaseCategoryForm();
// přidání dodatečných polí a callbacků do formuláře na editaci
return $form;
}
private function createBaseCategoryForm()
{
$form = new Form();
// nadefinování společné části formuláře
return $form;
}