Oddělení validace formulářů
- frosty22
- Člen | 373
Zdravím Vás,
zajímalo by mě, zda-li již někdo neřešil oddělení validace formulářových prvků od jejich reprezentace. Konkrétně se mi jedná o to, kdy například přijímám data buď pomocí formuláře, nebo mocí importu či SOAP přístupu apod. V tomto případě mnohé property validuji jak na místě buď entity (jedná-li se o skalární záležitosti) nebo nějaké procesní třídy, která zařizuje ukládání a zároveň i tedy ve formuláři. Líbila by se mi možnost, kde by šlo toto skloubit a měl nějaký objekt reprezentující validaci dané property a to bych nastavil jak na formulářový controler, tak i například při importu.
Řešil již někdo něco podobného? Děkuji
- frosty22
- Člen | 373
O této třídě vím, bohužel to neřeší přímo můj problém – tímto mohu validovat data, avšak validační pravidla musím mít též na dvou místech – v definici formuláře a v nějakém servisním objektu, například pro import apod.
No chvilku jsem si víkend hrál a z části jsem si vyřešil svůj problém, ale jen takové ALPHA řešení. Pro ukázku mi to nyní funguje následovně, ale ještě to musím dost rozšířit, ale zatím to svůj účet plní dobře, ale jak píši je to ALPHA a musím ještě dost věcí vyřešit:
<?php
// Příklad validátoru
class UserValidator extends Validation\ValidatorCollection
{
public function __construct()
{
$this->add("email", new EmailValidator());
$this->add("password", new LengthValidator(5));
$this->add("born", new DateValidator());
$this->add("born", new DateRangeValidator(new Date("1.1.1920"), new Date()));
$this->add("ic", new IcValidator());
}
}
// Příklad služba, která ukládá záznam
class CreateUser {
/** @var UserValidator $validator */
private $validator;
....
public function save(array $data)
{
// Zvalidujeme pole pomocí validátoru
if ($this->validator->validate($data)) {
// validní
} else {
// nevalidní
}
}
}
// Příklad formuláře
class UserForm extends BaseForm {
public function __construct(UserValidator $validator)
{
$this->addText("name", "Jméno");
$this->addText("email", "E-mail");
$this->addText("password", "Heslo");
$this->addText("ic", "IČ");
$this->addText("born", "Datum narození");
// Připojíme validator a nastavíme z něj validační pravidla
$this->setValidatorCollection($validator);
}
}
?>
Editoval frosty22 (31. 3. 2013 19:00)
- David Ďurika
- Člen | 328
mozes spravit nieco taketo:
<?php
// Příklad formuláře
class UserForm extends BaseForm {
public function __construct(UserValidator $validator)
{
$this->validator = $validator;
$this->addText("name", "Jméno");
$this->addText("email", "E-mail");
$this->addText("password", "Heslo");
$this->addText("ic", "IČ");
$this->addText("born", "Datum narození");
// Připojíme validator a nastavíme z něj validační pravidla
$this->onValidate[] = callback($this, 'validation');
}
public function validation(UserForm $form)
{
$values = $form->getValues();
$errors = $this->validator->validate($values); // alebo si tam predas cely form
// poseles errory uzivatelovy
}
}
?>
problem je v tom ze o validacnych pravidlach nevie formular… tem padom ti JS validacia nepojde…
Editoval achtan (31. 3. 2013 19:37)
- David Ďurika
- Člen | 328
cav, akurat riesim podobny problem…
ako si na tom s tym validatorom? pokrocil si nejako? mohol by si to niekam uploadnut…
Editoval achtan (7. 5. 2013 8:18)