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
+
0
-

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
+
0
-
  • 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á.