Autor Zpráva
janbarasek
Profil
Ahoj,

napsal jsem opravdu jednoduchý (ale za to účinný framework) pro tvorbu formulářů a kontrolu validity polí. Budu rád, když si jej stáhnete a vyzkoušíte. Zvládá jednoduše validovat (téměř) jakýkoli běžně používaný formát dat.

Stahujte zde: forms.baraja.cz/baraja_forms_1-0.rar
Živé demo: forms.baraja.cz/demo.php



Framework má opravdu simple-use syntaxi, kterou pochopí každý během jediné minuty. Není potřeba studovat dokumentaci. Stačí jej prostě začít používat podle přiložené ukázky. Veškerou logiku si řeší interně sám.

Při návrhu jsem vycházel z praxe, proto framework sám řeší všechny věci, které se běžně programují (automatická validace, detekce typů polí, kontrola typovosti dat, pokusy o podvrhnutí formuláře, ochrana před roboty (vlastním captcha kódem), možnost nastavení vlastních filtrů, variabilita chybových hlášení, ...).

Framework se výborně kamarádí s jinými frameworky. Pokud používáte BootStrap, tak bude formulář rovnou hezky ostylovaný (jako na obrázku); v ostatních případech stačí velice rychle vytvořit základní styly. Design formuláře je možné dále jednoduše přizpůsobit.

Celý framework je psaný v objektech jako statická třída. Stačí jej proto na začátku souboru načíst a je ihned k dispozici. Načtení se dělá jednoduše takto:
include 'forms.php';

Framework myslí hlavně na rychlost a další kompatibilitu. Mám v plánu brzy vydat další "komponenty", které budou tvořit celý plnohodnotný framework s důrazem na jednoduchost a opravdu rychlý vývoj (a také rychlost webu :D).

Ukázka syntaxe jednoduchého formuláře:
<?php
include 'forms.php';

$form = array(
    array(
        'name' => 'Jméno a příjmení',
        'id' => 'name', // interní název indexu (pole), kde bude dostupná hodnota
        'type' => 'text', // typ vstupního pole (textové)
        'required' => true, // jde o povinnou položku
        'valid' => array(
            'strlen' => '+5', // délka musí být >= 5
        )
    ),
    array(
        'name' => 'E-mail s požadovaným formátem',
        'id' => 'mail',
        'type' => 'text',
        'required' => true,
        'data' => '@', // toto bude předvyplněno v prázdném formuláři jako placeholder
        'valid' => array(
            'filter' => 'mail', // kontroluje, že to je mail
            'contain' => '@baraja.cz', // musí obsahovat tento řetězec
            'error' => 'Zadej ve formátu cokoli@baraja.cz', // vlastní error hláška
        )
    ),
);

Forms::render($form, // zavoláme statickou metodu, která se postará o celou logiku formuláře
    array(
        'method' => 'POST', // metoda odesílání dat (GET nebo POST), vyžaduji velká písmena
        'action' => 'postmail.php', // kam přesměrovat, až bude formulář správně vyplněn
        'submit' => 'Dokončit objednávku', // text odesílacího tlačítka
    )
);

Budu rád za jakoukoli zpětnou vazbu a nahlášené chyby. Také by mě zajímalo, jaké formulářové prvky často používáte a zde chybí. Rád framework ještě více přizpůsobím reálným potřebám.
Beavis
Profil
janbarasek:
Oprav si kódování (img.djpw.cz/ivd.png).
Nápad je fajn, ale přidávání formulářových prvků mi přijde dost krkolomné, třeba oproti Nette:
$form->addText('name', 'Jméno:')
    ->setRequired('Zadejte prosím jméno');
Ale chápu, že v rámci jednoduchosti to tak asi má být.
janbarasek
Profil
Beavis:
Opraveno (ach prohlížeče bez automatické detekce).

Na Nette se mi nelíbí to, že programátorovi za každou cenu nutí objekty. Když se třeba někdo učí s frameworky a objekty ještě moc nezvládá, tak to je pro něj hodně práce.
Zápis jako pole má také výhodu v tom, že lze formulář snadno vykreslit z databáze (a dynamicky měnit jeho položky).

Hlavně v tvojí ukázce není vidět, jak se bude validovat (možná to vidět je, ale ne na první pohled, když to třeba někdo nezná). Já vyžaduji validační pravidla striktně (jinak se použití obecná).
Keeehi
Profil
janbarasek:
Co třeba validace oproti datům jiného vstupu? Typický příklad použití je při vytváření hesla kde se to heslo zadává 2x proti překlepům a je potřeba kontrolovat, zda se hodnoty v obou vstupních polích shodují.
A co podmíněná validace - např. validovat jen když je pole vyplněné.
A co když se mi nelíbí výsledný HTML kód a chtěl bych ho změnit?

Když se třeba někdo učí s frameworky a objekty ještě moc nezvládá, tak to je pro něj hodně práce.
To že se bude vyhýbat práci s objekty mu přece v pochopení jak fungují nepomůže.

Celý framework je psaný v objektech jako statická třída
A já si myslel, že jsi psal, že objekty jsou pro uživatele moc složité :D

Zápis jako pole má také výhodu v tom, že lze formulář snadno vykreslit z databáze (a dynamicky měnit jeho položky).
To jde i s Nette forms.
janbarasek
Profil
Keeehi:
Co třeba validace oproti datům jiného vstupu? Typický příklad použití je při vytváření hesla kde se to heslo zadává 2x proti překlepům a je potřeba kontrolovat, zda se hodnoty v obou vstupních polích shodují.
Přesně toto framework sám řeší. Například u hesel si umí automaticky dohledat druhé pole (pokud existuje) a porovnat, že se hesla shodují. Testoval jsem to na mnoha příkladech a funguje to spolehlivě.

A co podmíněná validace - např. validovat jen když je pole vyplněné.
Přesně to se děje a je to dokonce výchozí nastavení. Rozlišuji povinné a nepovinné pole.
Povinné validuji vždycky, nepovinné jen, když se vyplní.

A co když se mi nelíbí výsledný HTML kód a chtěl bych ho změnit?
S HTML moc nehneš (není důvod), ale design můžeš měnit přes CSS relativně snadno.
Na HTML později udělám šablony, ale asi to není priorita.
Kód je každopádně validní a dobře midifikovaný.

To že se bude vyhýbat práci s objekty mu přece v pochopení jak fungují nepomůže.
To ne, ale může mít aspoň nějaký nástroj, který bude fungovat hned a později přejde na objekty. Jde hlavně o to, že se hodně lidí objektů bojí a než se na ně odhodlají plně (jako třeba já), tak musí získat základní návyky z frameworků, což tento splňuje.

A já si myslel, že jsi psal, že objekty jsou pro uživatele moc složité :D
Uživatel se s objekty vůbec nesetká. Pracuje pouze s polem. Interní logika je černá skříňka.
Monkeys
Profil *
janbarasek:

Tiez mam svoj class na formulare ale v inom rozlozeni.
Co mi chyba je definovat si svoje triedy pre inputy!
Dalej by som to rozsiril aj o select, select multiple a select optgroup!
Dalej input image!
Dalej ak by som chcel validovat aj javascriptom ako pridam do formu onclick?

Kratky priklad ako to mam ja:
public function inputText($name, $htmlOption = array(), $value = NULL ){


}


Tak omylom som nieco stlacil ... Potom prosim spojit.

public function inputText($name, $htmlOption = array(), $value = NULL ){
 /*
validacia inputu
*/
$text = '<input type="text" name="'. $name .'" value="'. $value .'" ' . $this->createHtmlOptions( $htmlOption ) . '/>';
return $text;
} 

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0