То, как я это делал в прошлом, это построить для него объекты ... объект формы, объект поля формы и объект проверки поля формы.
Таким образом, вы бы создать все объекты на местах и, в случае необходимости, приложите валидаторы к ним, а затем приложить всю массу в форму - так что вы вроде в конечном итоге что-то вроде:
$oFieldUsername = new FormField('username', new Validator(Validator::TYPE_EMAIL));
$oFieldPassword = new FormField('password', new Validator(Validator::TYPE_PASSWORD));
$oForm = new Form(Form::METHOD_POST, '/path/to/action.php');
$oForm->attachField($oFieldUsername);
$oForm->attachField($oFieldPassword);
//form has not been posted
if(!$oForm->isReceived()) {
$oForm->render('/path/to/view.tpl.php');
}
//the form HAS been posted but IS NOT VALID
elseif(!$oForm->isValid()) {
$oForm->render('/path/to/view.tpl.php');
}
//the form HAS been posted and the data LOOKS valid
else {
//do processing and hand-off
}
валидаторы имеют дело с такими вещами, как определение необходимости полевых данных, если данные соответствуют пустой строке (RegExp), тогда это не требуется, например.
Но они могут также иметь дело с электронной проверкой (с или без getmxrr() перекодировки) или что-нибудь еще, вы просто строить типы Validator для конкретных случаев ... или у вас есть общие валидаторы:
new Validator(Validator::TYPE_EMAIL); //basic email validator
new Validator(Validator::TYPE_EMAIL_WITH_MX); //email validator with getmxrr()
new Validator(Validator::TYPE_REGEXP, '/^[\w]+$/'); //generic regular expression with the pattern to match as the second parameter
new Validator(Validator::TYPE_INT_MIN, 10); //integer with a minimum value of 10
new Validator(Validator::TYPE_REGEXP, '/^[\w\s]*$/', true); //the third parameter could be an override so that the validation is optional - if the field has a value it MUST validate, if it doesn't have a value, it's fine
Этих дает вам столько гибкости, сколько необходимо для проверки. Весь метод Form::isValid()
выполняет петли через все прикрепленные поля, проверяет, есть ли у них валидаторы, и если да, то метод Validator::isValid()
возвращает true.
Вы также можете прикрепить несколько валидаторов в полях что-то вроде:
//the field value must be an integer between 5 and 10 (inclusive)
$oField->addValidator(new Validator(Validator::TYPE_INT_MIN, 5));
$oField->addValidator(new Validator(Validator::TYPE_INT_MAX, 10));
... вот как я сделал это в любом случае.
вы можете проверить библиотеку form_validation, чтобы узнать, как CI делает это –
Codeigniter имеет код для этого, я не уверен, что вы ожидаете найти в «php native». В php нет форм (вы можете создать php-файл, который генерирует HTML-форму, но нет родного объекта, который представляет форму afaik). – Nanne
Взгляните на Quickform2 - IMHO - один из лучших подходов для форм PHP. http://pear.php.net/package/HTML_QuickForm2 – ExternalUse