Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: nette

PHP Nette Framework Nette framework nette

Aktivity (1)
Avatar
Milan Gallas
Redaktor
Avatar
Milan Gallas:1.1.2014 16:24

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:1.1.2014 16:36

Ř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
Neaktivní uživatel:1.1.2014 16:45

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
Neaktivní uživatelský účet
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na Milan Gallas
Drahomír Hanák:1.1.2014 16:58

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:1.1.2014 17:01

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:1.1.2014 17:06

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:1.1.2014 17:07

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:1.1.2014 17:10

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.