Nette2 aplha / dev, odeslani formulare a validace

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
RDPanek
Člen | 189
+
0
-

Ahoj, přešel jsem z Nette 0.9 na Nette 2 aplha a řeším záludnost s odesláním formuláře a jeho validaci.

Z url jsem stáhnul Nette Framework 2.0-alpha2 pro PHP 5.3 se jmennými prostory

ale v komentáři v „loader.php“ je uvedeno že je to „dev“. Je v pořádku, že ze stránek stahuji verzi označenou „aplha“ a v „loader.php“ je uvedeno, že se jedná o „dev“?.

Presenter:

use Nette\Debug;
use Nette\Environment;
use Nette\Forms\Form;

...

public function createComponentVerifyEmailForm($name)
    {

        $form = new Form($name);
        //$form->getElementPrototype()->class('ajax');

        $form->addText('email')
                ->addRule(Form::FILLED, 'Emailová adresa musí být vyplněna.')
                ->setDefaultValue('@')
                ->getControlPrototype()->class('input_email_test _radius in_shadow_form');

        $form->addSubmit('sendForm', 'Pokračovat');//->onClick[] = array($this, 'processIsUserRegistered');
        $form['sendForm']->getControlPrototype()->class('form_button_next _radius');

        $form->onSubmit[] = array($this, 'postForm_isUserRegistered');

        return $form;

    }

    public function postForm_isUserRegistered(Form $form)
    {

      $entry  = $form->getValues();
      Debug::dump($entry); die();
      //$this->invalidateControl('form');

      //$this->flashMessage('OK');

    }

Tak jak bych čekal že formulář se zpracuje metodou „postForm_isUserRegistered“ tak se tak neděje. Pouze se reloadne stránka.

Form ve vygenerovaném HTML vypadá takto:

<form action="" method="post" id="frm-verifyEmailForm">

Prázdný atribut „action“ je pravděpodobně v pořádku podle RFC 1808, když odkazuji na tu samou stránku.

Prohlížel jsem změny v Nette2 oproti verzi 0.9 a i example mi bez problému fungují. Snad tím, že nejsou ukázány v celistvé Nette aplikaci, ale pouze na jedné stránce, kde je zpracování řešeno, tak že se zjišťuje „if“ byl formulář validně odeslán?…

Poslední mne napadlo, řešit routy, ale problém v nich nevidím:

$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');

Formulář do šablony vykresluji:

{control verifyEmailForm}

Další věcí, která mne zaráží, že formulář mi validuje „pravděpodobně“ HTML5 – jednoduše řečeno.
Podle výše uvedené implementace by mělo vyskočit js okno s hláškou, ale vyskakuje bublina s vlastní hláškou.
Tak to se děje v chrome 11.0.696.57 i Firefox 4.0.

Vygenerovaný input:

<input type="text" class="input_email_test _radius in_shadow_form text" name="email" id="frmverifyEmailForm-email" required="required" data-nette-rules="{op:':filled',msg:&quot;Emailov\u00e1 adresa mus\u00ed b\u00fdt vypln\u011bna.&quot;}" value="">

Opět v examples vše funguje jak má, takže bych hledal chybu někde u sebe, ale kde… řešil jste někdo podobný problém? Díky za info.

22
Člen | 1478
+
0
-

Zrovna včera jsem to tu psal a žádal o smazání :-)

use Nette\Application\UI\Form //místo use Nette\Forms\Form

Musíš použít form adapter pro presenter https://api.nette.org/…UI/Form.html

  • Edit: a název třídy Debug je už taky po smrti, místo ní je Debugger
  • Edit2: HTML validace vypnutí → $form->getElementPrototype()->novalidate = ‚novalidate‘;

Editoval 22 (2. 5. 2011 10:05)

RDPanek
Člen | 189
+
0
-

Patrik Votoček napsal(a):

viz: https://phpfashion.com/…tory-v-nette

thx, ale četl jsem – právě jsem vše projížděl.

I když ve struktuře Nette\Application\UI\Form.php vydím tuto třídu, tak mi ji namespace v NetBeans nenabízí – když jí uvedu na tvrdo bez našeptávače, tak jí nezná.
Místo toho jsem zkusil:

use Nette\Application\AppForm;

a form běhá tak jak má. To samé Debug fachá, ale Debugger ne…

22
Člen | 1478
+
0
-

měl jsem za to, že máš poslední verzi Alpha ze 27.4.11

RDPanek
Člen | 189
+
0
-

22 napsal(a):

měl jsem za to, že máš poslední verzi Alpha ze 27.4.11

mám: Nette Framework (version 2.0-dev released on 2011–04–13, https://nette.org)

psal jsem výše. stáhnul jsem z download page – jdu navštívit repozitář

RDPanek
Člen | 189
+
0
-

Stáhnul jsem: Nette Framework (version 2.0-dev released on 2011–04–28, https://nette.org), vše je již v pořádku.

Díky