Альтернатива для совокупности Zend_Form + Zend_Validator + Zend_Filter

Крот

Новичок
Здравствуйте,

В последнем проекте использовал библиотеки Zend_Form, Zend_Validator, Zend_Filter; использовал без генерации HTML (поэтому этот их плюс меня не привлекает). Не понравилось по ряду причин: очень большой overhead при написании класса формы; для построения форм с ветвлениями при валидации приходится писать свои Element'ы либо суб-формы (опять же overhead, да и вообще ад).

Ничего не имею против Zend_Form. Да, очень крутые фильтры, очень крутые валидаторы, крутая поддержка генерации html с декораторами и т.д. и т.п., но всё получается __слишком__ громоздко. Сперва думал, что нужно просто втянуться. Втянулся, спасибо, наелся. Теперь ищу легкую альтернативу, чтобы применить ее в новом проекте.

Хотелось бы какую-то обертку для фильтрации, валидации форм:
- фильтрация входных данных (utf8 безопасное триммирование и т.д.)
- валидация данных; самое главное, чтобы не было проблем с построением большого ветвления условий при валидации, т.к. формы достаточно сложные.
- свои ошибки валидации
- не нужно: генерация html

Какие обертки для этих действий Вы используете в своих проектах?

Заранее Спасибо!
 

WMix

герр M:)ller
Партнер клуба
юзаю зенд и доволен, непонимаю что тут многословного? описано по минимуму, с любым аттрибутом, фильтром и валидатором, как ты представляешь написать короче?
PHP:
    $form->addElement('text', 'username', array(
        'validators' => array(
            'alnum',
            array('regex', false, '/^[a-z]/i')
        ),
        'required' => true,
        'filters'  => array('StringToLower'),
    ));
Теперь ищу легкую альтернативу, чтобы применить ее в новом проекте.
что значит легкая?
Какие обертки для этих действий Вы используете в своих проектах?
помню генерили html+php на основе xml документа и шаблона xslt класная штучка получалась, минимум кода, но совсем не гибкая
PHP:
<element type="Date" name="date">
  <validators>..</validators>
  ...
</element>
- не нужно: генерация html
не генери html юзай viewScript
 

Крот

Новичок
WMix, я не спорю - всё замечательно. Но теперь попробуй написать, как это будет выглядеть если ты захочешь, например прикрутить разные валидаторы в зависимости от значения одного из полей или, например, в зависимости от результатов валидации предыдущих полей. В init() ты этого не сделаешь, т.к. там еще нет значений полей, а костылить не хочется. Нужно это делать в isValid($data) (или писать свой сложный элемент и валидатор для него). В isValid($data) это тоже сделать проблематично - приходится извращаться, модифицируя Zend_Form::isValid().

SiZe, ext.js конечно же видел :)
 

WMix

герр M:)ller
Партнер клуба
валидаторы в зависимости от значения одного из полей. В init() ты этого не сделаешь
конечно сделаешь
есть готовый валидатор, проверка на идентичность
PHP:
$this->addElement('password', 'verifypassword', array(
    'label'      => 'Verify Password:',
    'required'   => true,
    'validators' => array(
        array('identical', true, array('password')) // вот тут передача другого поля
    )
));
а все остальное, этож ты сам себе придумал, описать то надо, что ты подразумеваешь..
да класс наследованный валидатор и один метод как капсула но на этом закончилось... попробуй сверху оглядеть проблему "зависимости" от других полей, может есть возможность описать всего один раз такой валидатор...

помню мы писали динамическую форму, где вопросы менялись в зависимости от предыдущих ответов, был описан движек для форм, состоящий из steps и transitions и в зависимости от ввода данных переход направляли на правильный step внутри каждого шага было вписано разширение которое в зависимости от выборов select или radio подгружал поля на ajax причем это можно делать даже простым hide, show

задача нужна конкретная, я подумал бы как бы я написал
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
- валидация данных; самое главное, чтобы не было проблем с построением большого ветвления условий при валидации, т.к. формы достаточно сложные.
Типа такого?
PHP:
$emailPresent = $email->createRule('nonempty', 'Supply a valid email if you want to receive our spam');
// note lack of error message here, error should only be set by previous rule
$emailValid   = $email->createRule('callback', '', array('callback'  => 'filter_var',
                                                         'arguments' => array(FILTER_VALIDATE_EMAIL)));
// note lack of error message for 'empty' rule, we don't want error on a checkbox
$spamCheck->addRule('empty')
          ->or_($emailPresent->and_($emailValid));
 
Сверху