Problem s addProtection ve formulari pri odesilani dat pomoci JS
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- vosy
- Člen | 532
Ahoj mam formularik a v nem addProtection
class pridatFormFactory
{
public function defaultForm($opt=array())
{
$parent = $opt['parent'];
$form = new MyForm;
$form->addGroup();
$form->addSelect('svetadil', 'Svetadil:')
->setPrompt(' -- ')
->setRequired('Zvolte prosím světadíl.');
foreach(\App\Glb::$JAZYKY as $k1=>$v1)
{
$form->addText('nazev_'.$k1, 'Destinace ('.$k1.'):')
->setRequired('Zadejte název destinace ('.$k1.').')
->setAttribute('placeholder', $v1['label']);
}
$form->addCheckbox('useForAllLang', 'Použít pro všechny jazyky.')
->setDefaultValue('checked');
$form->setCurrentGroup(NULL);
$form->addSubmit('ulozit', 'Uložit');
$form->addSubmit('storno', 'Storno')
->setValidationScope(FALSE)
->onClick[] = callback($this, 'defaultFormStorno');
$form->addProtection('Vypršel časový limit, odešlete formulář znovu');
$form->onValidate[] = callback($this, 'defaultFormValidate');
$form->onSuccess[] = callback($parent, 'pridatFormUlozit');
return $form;
}
pomoci JS odesilam data
$.post(url, pData, function(r)
{
validace formulare
function ajaxValidateForm($opt)
{
$form = $opt['form'];
$successFce = $opt['successFce'];
$post = $this->request->post;
// print_r($post['form']);
$form->setValues($post['form']);
$form->validate();
$return = array();
if($form->hasErrors())
{
foreach($form->getErrors() as $v1)
{
$return['chyba'][] = $v1;
}
}else
{
$r = $successFce['tarFce']->{$successFce['nameFce']}($successFce['form']);
$r = is_array($r) ? $r : array();
$return = array_merge($return, $r);
if ($this->hasFlashSession())
{
$id = $this->getParameterId('flash');
$flashes = $this->getFlashSession()->$id;
foreach($flashes as $v1)
{
$return['ok'][] = $v1->message;
}
}
}
echo json_encode($return);
}
vysledek
$form->addProtection('Vypršel časový limit, odešlete formulář znovu');
v hlavnim presenteru mam
protected function startup()
{
parent::startup();
$this->session->start();
ve verzi nette 2.0.* to fungovalo :(
- amik
- Člen | 118
- dotaz na fóru by měl obsahovat zásadní věc: dotaz. Takto můžeme jen kývnout, ano, tento kód v nette verzi 2.0.* asi opravdu funguje :)
- možná to hlásí nějakou chybu. Pokud ano, poděl se o ni, pokud ne, přibliž nám jinak, co znamená „nefunguje“.
- k čemu ta divoká funkce pro validaci formuláře? nette má vlastní podporu validace formulářů, tady se zřejmě snažíš použít nějakou celkem obskurní vlastní, která kdoví jestli vůbec nějak souvisí s tvým problémem, každopádně se v ní kromě tebe sotva kdo vyzná.