Autor Zpráva
Dan Charousek
Profil
Hezké dopoledne všem,

už to bude nějaký pátek, co jsem podruhé představil Vall-Iho.

Nedávno jsem se Vall-Imu mohl trochu věnovat a rád bych Vám zde prezentoval výsledek.

Zdrojový kód Vall-Iho je k dispozici na Bitbucketu.

Nyní bych přešel rovnou k samotnému použití:

1) Instalace Vall-Iho
- Nejjednodušší instalace je přes composer, kde stačí v projektu zavolat příkaz composer require dancharousek/vall-i.
- Samozřejmě je třeba načítat vendor/autoload.php s čím se tak nějak počítá, jestliže composer v daném projektu používáte

Pro jednoduchost předpokládejme následující strukturu projeku:
- index.php // Hlavní stránka obsahující formulář
- submit.php // PHP soubor zpracovávající odesílání formuláře
- form.php // samotný formuláře (<form>...</form>)

index.php

<?php
    
    session_start();
    
    require_once 'vendor/autoload.php';
    
    use DanCharousek\VallI\VallI;
    
    $form = VallI::createFromFile('form', 'php', ['moznosti' => ['První', 'Druhá', 'Třetí']]); // 2. parametr je koncovka souboru, defaultně .php a 3. parametr jsou parametry, které předáváte do šablony formuláře (nepovinné)
    $form->save();
    
?>
<html>
    <head>
        <meta charset="utf-8">
        <title>Použití Vall-Iho</title>
    </head>
    <body>
        <?= $form ?>
    </body>
</html>

form.php
<form method="POST" action="submit.php">
    <input type="text" name="username" valli-rules="required:true" valli-name="Uživatelské jméno">
    <input type="password" name="password" valli-rules="required:true|minlength:6" valli-name="Heslo">
    <button type="submit">Odeslat</button>
</form>

submit.php
<?php

    session_start();

    require_once 'vendor/autoload.php';
    
    use DanCharousek\VallI\VallI;

    $result = VallI::validate();
    
    if($result->isValid()) {
        // Formulář je validní, můžeme zpracovat data
        $data = $result->getValues();
    } else {
        // Formuláře není validní, získáme chybové hlášky:
        $errorMessages = $result->getErrorMessages();
        // přesměrujeme zpět na formulář, kde se automaticky vypíší inline error messages a vyplní se správně zadané hodnoty
        Header("Location: index.php");
        exit;
    }
    
milous
Profil
Dan Charousek:
v kódu sice používáš některé nové fičury PHPka, celkem se i snažíš typovat proměnné, ale z hlediska návrhu už to nevypadá tak vesele. Neví co je tvým cílem, ale momentálně je to za mě nepoužitelné. Pokud to máš v rámci nějakého svého sebevzdělávání, tak mrkni třeba na nette/forms a zkus si tam třeba dopsat nějaký vlastní formulářový prvek.
Dan Charousek
Profil
milous:
Mohl bys prosím svou odpověď rozvést?

"Nevypadá vesele" a "Za mě nepoužitelné" je nic neříkající. Nette forms samozřejmě znám, Vall-I je určen převážně pro projekty menšího rozsahu, kde je potřebova nasadit jednoduchou validaci. Pomocí Vall-Iho je to prakticky otázka jednoho attributu (valli-rules), který se přidá k danému elementu. Z šablony formuláře je tudíž transparentní, jaká pravidla musí prvek splňovat.
Alphard
Profil
Dan Charousek [#3]:
Mně padlo do oka třeba to, že při validaci se nepředává vzor formuláře. Z kódu jsem zjistil, že se to vytahuje ze session, což mi padlo do oka ještě víc. Třeba to podle mě není řešené šťastně, je tam skrytá docela klíčová závislost.
milous
Profil
Dan Charousek:
rád svou odpověď rozvedu, ale právě nevím z jakým cílem to sem dávals.

milous:
hlediska návrhu už to nevypadá tak vesele
- tak třeba kůli poslání obyčejného formuláře mi nedává smysl startovat session (to má význam jen v případech, že chceš formulář zabezpečit)
- pokud sem to dobře pochopil, tak přesměrováváš i nevalidní formulář - jaký to má význam?

Dan Charousek
určen převážně pro projekty menšího rozsahu, kde je potřebova nasadit jednoduchou validaci.
pokud tím chceš říct, že např. nette forms jsou na projekty menšího rozsahu nevhodné, tak s tím si dovolím taky nesouhlasit. Nejsou zas tak robustní a nemusí se používat pouze v rámci celého frameworku, ale jde to i samostatně.
Dan Charousek
Profil
Alphard:
je tam skrytá docela klíčová závislost.
Nad tím jsem přemýšlel, ale na druhou stranu request přijde vždy jeden a poslední načtený formulář se validuje, tudíš se nestane, že by se zpracovával formulář na místě, kde se zpracovávat nemá. Nejspíš by to šlo, pokud by měl někdo otevřený dvě okna a pak odeslal formulář v tom, které otevřel jako první. Ale to by přineslo jen to, že se formulář vyhodnotí jako nevalidní.

Původně se cesta k formuláři do metody VallI::validate(); předávala, ale právě po výše zmíněné úvaze jsem to změnil.

milous:
nedává smysl startovat session
Z jakého důvodu? Rychlost a ani paměť to tolik nežere. Slouží to právě k tomu, aby se vědělo, jaký formulář se má validovat.

- pokud sem to dobře pochopil, tak přesměrováváš i nevalidní formulář - jaký to má význam?
Formulář se validuje až po odeslání, jasně, že se odešle i když je nevalidní (protože nevím, že není validní) JS validace implementována není.


Dan Charousek:
Nejspíš by to šlo, pokud by měl někdo otevřený dvě okna a pak odeslal formulář v tom, které otevřel jako první.
I když ani to by nebyl problém, protože ve skrytém inputu předávám id formuláře.
Alphard
Profil
I když tady asi budou nějaké praktické problémy typu „co když mezitím session vyprší“, „co když se bude startovat pozdě“, nebo „co když chci session spravovat nějakým vlastním wrapperem“; já to myslel spíš návrhově. Vall-I je prezentován jako validační knihovna, určitě bych nečekal, že mi bude sahat na session a nemělo by se to dít.
Teď když ještě v rychlosti procházím kód, tak se mi nelíbí ani třeba getContentFromFile, když pominu, že než ten cyklus by bylo elegantnější extract, tak je to zase obrovský vedlejší efekt. Já tam čekal parser, přece nemůže bez varování naincludovat nějaký soubor...

Já opravdu nechci působit nějak moc kriticky, i když to tak teď vyzní. Ale účel tohoto vlákna vnímám jako prezentaci a propagaci vlastního projektu (což už je mimochodem asi dost na hraně pokud jde o pravidla), ale těžko můžete očekávat, že někdo bude chtít používat „jednoduchou“ knihovnu, která má přitom docela velké závislosti.
Dan Charousek
Profil
Alphard:
Já opravdu nechci působit nějak moc kriticky
Ba naopak, mockrát děkuji, jsem rád, za jakokoliv konstruktivní zpětnou vazbu.

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