Ok mam taką koncepcję:
<?php
<?php
/**
* Created by PhpStorm.
* User: Patryk
* Date: 2016-10-03
* Time: 20:24
*/namespace Users\Form;
use Zend\Form\Fieldset;
use Zend\Hydrator\Reflection as ReflectionHydrator;
use Users\Model\Users;
use Zend\InputFilter\InputFilterProviderInterface;
use Zend\Validator\EmailAddress;
use Zend\Captcha;
use Zend\Validator\StringLength;
class UsersFieldset extends Fieldset implements InputFilterProviderInterface
{
public function getInputFilterSpecification()
{
return [
'login' => [
'options' => [
'label' => 'Login',
],
'validators' => [
[
'name' => StringLength::class,
'label' => 'Login',
'options' => [
'min' => 5,
'max' => 20,
'message' => "Wartość pola Login musi być dłuższa niż %min%, a krótsza od %max%",
],
],
[
'name' => EmailAddress::class,
'options' => [
'messages' => [
'emailAddressInvalidFormat' => 'Wpisana wartośc nie jest typu "email". Użyj formatu: local-part@hostname '
],
'domain' => true,
],
],
],
]
];
}
public function init()
{
$this->setHydrator(new ReflectionHydrator());
$this->setObject(new Users());
$this->add([
'type' => 'hidden',
'name' => 'id',
]);
$this->add([
'type' => 'text',
'name' => 'login',
'options' => [
'label' => 'Login',
'size' => '30',
],
]);
$this->add([
'type' => 'password',
'name' => 'password',
'options' => [
'label' => "Hasło",
],
]);
$this->add([
'type' => 'text',
'name' => 'name',
'options' => [
'label' => "Imię",
],
]);
$this->add([
'required' => true,
'type' => 'Email',
'name' => 'email',
'options' => [
'label' => "Email",
],
]);
/* $this->add([
'type' => 'captcha',
'name' => 'captcha',
'options' => [
'label' => 'Zabezpiecznie antyspamowe',
'captcha' => new Captcha\Dumb(),
],
]);*/
$this->add([
'type' => 'submit',
'name' => 'submit',
]);
}
}
Zastanawiam się czy takie rozwiązanie jest poprawne - tego fieldsteu będę używał np. jeszcze do edycji danych użytkownika, więc mógłbym go ponownie wykorzystać.
A co np. jeżeli powiedzmy miałbym sekcję komentarzy pod artykułami i w opcjach byłaby tam możliwość dodania swojego adresu email - musiałbym od nowa definiować np. translację błędów przy złym typie danych (nie email).
Jak wy tworzycie sobie walidacje formularzy tak, aby było w miarę przejrzyście i bez zbędnego powielania kodu?