Nette2 aplha / dev, odeslani formulare a validace
- RDPanek
- Člen | 189
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.
- PHP 5.3.2 (cli)
- Nette Framework (version 2.0-dev released on 2011–04–13, https://nette.org)
- http://ajax.googleapis.com/…query.min.js
- netteForms.js
- jquery.ajaxform.js
- jquery.nette.js
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:"Emailov\u00e1 adresa mus\u00ed b\u00fdt vypln\u011bna."}" 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
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
Patrik Votoček napsal(a):
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…
- RDPanek
- Člen | 189
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
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