Diskuze: nette

PHP Nette Framework Nette framework nette

Avatar
Milan Gallas
Redaktor
Avatar
Milan Gallas:

Nevíte někdo proč mi nefunguje následující validace v Nette?

<?php
require 'Nette/loader.php';

use Nette\Forms\Form;

$form = new Form;

mb_internal_encoding("utf-8");

$form->addText('name', 'Jméno:')
     ->setRequired("Zadajte jméno");

$form->addPassword('password', 'Heslo:')
    ->setRequired('Zvolte si heslo')
    ->addRule(Form::MIN_LENGTH, 'Heslo musí mít alespoň %d znaky', 3);

$form->addPassword('passwordVerify', 'Heslo pro kontrolu:')
    ->setRequired('Zadejte prosím heslo ještě jednou pro kontrolu')
    ->addRule(Form::EQUAL, 'Hesla se neshodují', $form['password']);

$form->addText('age', 'Věk:')
                ->setType('number')
                ->addRule(Form::RANGE, "věk msí být v rozmezí %d - %d let", array(18, 120));

$form->addSubmit('send', 'Registrovat');

echo $form; // vykreslí formulář

if($form->isSuccess()){
 $values = $form->getValues();
 var_dump($values);
}
?>

Například validace hesla se vůbec neprovádí a já nevím prostě proč tomu tak je.

Editováno 1.1.2014 16:25
 
Odpovědět 1.1.2014 16:24
Avatar
Kit
Redaktor
Avatar
Odpovídá na Milan Gallas
Kit:

Řekl bych, že tam $form['password'] nemá co pohledávat.

Nahoru Odpovědět 1.1.2014 16:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Radim Sückr
Redaktor
Avatar
Radim Sückr:

Verze Nette?

BTW - V Nette byl a tuším pořád je problém ho nějak "roztrhat". Symfony je dělané z "bundles" a ty na sobě nejsou závislé. Nette je ale propojené. Jediné, co je oficiálně vyseknuté je nette/tracy (debugger) a nějak Latte. Tudíž bych ti radil použít celý framework.

Editováno 1.1.2014 16:46
 
Nahoru Odpovědět 1.1.2014 16:45
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na Milan Gallas
Drahomír Hanák:

Nevidím, že bys tam validaci nějak zpracovával.

 
Nahoru Odpovědět 1.1.2014 16:58
Avatar
Milan Gallas
Redaktor
Avatar
Odpovídá na Kit
Milan Gallas:

ale nefunguje mi nic.
Form::MIN_LENGTH - která zajistí minimální délku hesla, a ani Form::EQUAL- která porovnává dvě pole. Jinak $form('password') musí fungovat, protože je v něm uložený předešlí input.

 
Nahoru Odpovědět 1.1.2014 17:01
Avatar
Juraj Mlich
Redaktor
Avatar
Juraj Mlich:

Skús zaregistrovať callback - onSuccess na Forme

Nahoru Odpovědět 1.1.2014 17:06
Vždy je lepšie učiť sa z cudzích chýb, než z vlastných chýb.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Milan Gallas
Kit:

Hlavně si ujasni rozdíl mezi $form['password'] a $form('password'). Bez toho se dál nehneme.

Vzhledem k tomu, že $form je objekt, tak se domnívám, že $form['password'], protože tak se napracuje s objektem, ale se slovníkem. Nemyslím si, že by to bylo v Nette přetíženo. Takže bych spíš zkoušel $form->getItem('password')->getValue() nebo něco takového. Nevím, jak to přesně má vypadat, protože s Nette nedělám. Zkus se zeptat na fóru Nette.

Nahoru Odpovědět 1.1.2014 17:07
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na Kit
Drahomír Hanák:

Form je v Nette komponenta, která může obsahovat další komponenty. Implementuje ArrayAccess pro snadnější přístup. Je to zkrácené volání $form->getComponent('pas­sword')

 
Nahoru Odpovědět  +1 1.1.2014 17:10
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.