Валидиране на формуляр
Валидирането на формуляри е една от най-рутинните задачи. Където и да погледнете, навсякъде има форма на човешко взаимодействие със сайта. От една страна, валидирането е предпазна мярка, от друга страна, това е вид помощ за човек при взаимодействие с уеб страница
И така, това е четвъртата „палачинка“ по отношение на структурата, надявам се, че няма да е буца (предишните опции бяха сложни и не оптимални. Месец по-късно, след като прочетох моята лична помощ за валидиране, почти не влязох какво се случва. Колко трудно всичко изглеждаше за разбиране и изпълнение. За съжаление, все още не съм усвоил изкуството да пиша документация).
Технически условия:
Разработете механизъм за валидиране на входни елементи на уеб формуляр, който ще отговаря на следните изисквания:
- валидиране на клиентски и сървърни данни
- лесно интегриране на нови правила за проверка
Философия на принципа на валидиране
За по-задълбочено разбиране, нека разгледаме прототип на уеб страница, който е възможно най-близо до реалността.

Формулярът за изпращане трябва да бъде проверен за:
- имейлът не е празен и валиден
Нека да обобщим. Първата форма трябва да се провери за три правила, а втората само за едно. Въвеждаме концепцията за правило за валидиране игрупа правила (rule_group), това е масив от списъка с правила за валидиране, за който трябва да проверите уеб формуляра
Нека да разгледаме теоретичната част как трябва да работи:
- От страна на клиента (уеб браузър) човек взаимодейства с уеб страница (въвежда данни във формуляр и се опитва да изпрати)
- Валидирането се извършва от страна на клиента чрез изпращане на Ajax заявка към сървъра. В заявката предаваме масив, който съдържа всички елементи на формуляра и техните стойности (които трябва да участват в валидирането),както и името на групата правила, за чиито правила за валидиране искате да проверите уеб формата
- Сървърът обработва получените данни и връща отговор
- Ако отговорът е отрицателен, в уеб формата (за предпочитане близо до задължителните елементи) трябва да изведете известие за допуснатите грешки.
- Ако отговорът е да, данните от формуляра се изпращат.
- Получените сървърни данни се проверяват втори път, тъй като не вярваме на клиентските данни, въпреки първичната проверка.
- Ако резултатът от проверката от сървъра е отрицателен, тогава се пренасочва към предишната страница с извеждане на всички въведени данни и информация за грешки
- Ако отговорът е да, тогава изпълнете скрипта и излезте от скрипта
От горното разделяме концепцията за валидиране на две групи:
- Клиент - изпълнява се от страна на клиента (уеб браузър), в нашия случай с помощта на javascript. Тя е в състояние да предупреди, да помогне на потребителя при въвеждане на данни. Валидирането се извършва с помощта на ajax, което елиминира необходимостта от презареждане на уеб страницата.
- Сървър - тъй като на данните, които получаваме от потребителя, не може да се вярва в никакъв случай, ще го нарека проверка на сигурността.
И така, предаваме данните на входните елементи на сървъра за валидиране, името на групата от правила също, остава само да създадем тези групи от правила със самите правила, преди (предварително) да извършим проверката. Данните за групата на правилата и самите правила се съхраняват в многоизмерен асоциативен масив (да го наречемвалидационен масив ) със следната форма:

Всички показани елементи са масиви, нека ги разгледаме:
- rule_group : първият асоциативен масив в йерархията, чийто ключ е името на групатаправила. Стойността на масива е масив със списък от конфигурационни елементи на група правила и елементаrules. Конфигурационните елементи са условно разделени на задължителни, които трябва да присъстват и незадължителни
- Задължителни конфигурационни елементи на формуляра за валидиране:
- флаг - (true false)- резултатът от проверката на всички правила за групата правила (rule_group) се записва в този елемент от масива. вярно: резултатът от проверката на всички групови правила върна положителен резултат; невярно: поне един тест на правилото върна отрицателен резултат
- message_type_show (help ) - как да се показват известия за валидиране за всички правила за валидиране на формуляри (помощ - показване в помощния div за първоначално зареждане за елемент)
Конфигурационни елементи на задължителни глобални правила за валидиране:
- rule_name - име на валидиращото правило
- флаг - (truefalse)- тук се записва резултатът от изпълнението. вярно: положителен резултат от проверката на правилото; невярно: тестът на правилото е неуспешен
- message_type_show (help ) - как да се показват известия за валидиране за правилото за валидиране на формуляра (помощ - показване в помощния div за първоначално зареждане за елемент)
- message_id (null ) - идентификатор на елемента, където трябва да се покаже съобщението (зависи от message_type_show, ако е необходимо)
- съобщение (null ) - текст, който трябва да се покаже в случай на отрицателен резултат от правилото за проверка
- инверсия - (false true) - ако е вярно, тогава обръща резултата от проверката. Логично НЕ.
Правилата за всяка форма се съхраняват в отделен файл/configs/rule/rule_.php
Правилата за валидиране се определят с помощта на методаaddRule ($array), където $array е част от клона на валидиращия масив за изискваното правило. Пример за създаване на правило:
МетодътaddRule връща пълния клон на валидиращия масив за конкретно правило
Потвърждение на клиента
Валидирането на формуляр от страна на клиента се извършва от функциятаcheckRule js, която приема два аргумента като аргумент:
- ID на група правила
- ID на уеб формуляр. В същото време всички входни елементи на уеб формуляри, които участват в валидирането, трябва да имат атрибута data (data-val ). Входните елементи, които съдържат този атрибут данни, ще бъдат предадени в ajax заявката към сървъра.
Заявката на Ajax, която функцията checkRule изпълнява, предава масив като този:
- mod : формуляр
- действайте : правило за проверка
- rule_group : име на група правила
- rule_data : асоциативен масив, съдържащ списък с имена на входни елементи (key ) и техните стойности(value ), които участват в проверката на тази група.
Пример за валидиране на извикващ формуляр преди изпращане (rule_group - име на група)
Първият вариант за изпълнение работи на два етапа. Първата заявка на ajax поиска списък с идентификатори на елементи, чиито стойности трябва да бъдат предадени на валидатора, а втората извърши самото прехвърляне на данни. В тази версия минус: две ajax заявки; невъзможност за използване в правилото за валидиранедва или повече елемента на формуляр, за които няма валидиране
Сървърът, в отговор на ajax заявка, трябва да върне масив от данни, чиито елементи ще бъдат асоциативни масиви със следните задължителни елементи:
- флаг - вярно - успешно валидиране; false - неуспешна проверка, има грешки
- data - ако flag==false, тогава съдържа асоциативен елемент със следните задължителни елементи:
- съобщение - текст за уведомяване за валидиране
- message_show_type - метод за извеждане на известия
съдържа други елементи в зависимост от message_show_type
Валидиране на сървъра
Пример за валидиране от страна на сървъра
Правила за проверка
Елементите на формуляр за валидиране се проверяват за правила чрез главния php методcheckRule($rule_group,$data) на класаForm
- $rule_group - име на групата правила
- $data - асоциативен масив от данни за проверка
Методът връща масив от данни.
checkRule използва набор от методи за проверка на различни правила:checkRule($rule,$data) за определен елемент, където:
- $rule - масив с описание на правилото
- $data - асоциативен масив от всички групови данни за проверка (предавам го нарочно, защото често може да се окаже, че проверката зависи от други елементи)
методът checkRule връщаtrue илиfalse
Ако поне едно от правилата за валидиране даде отрицателен резултат, валидирането се счита за неуспешно и връщаfalse. Тоест, успешна проверка е проверка, когато всички правила са върнали true без изключение.
Между другото, в клиентапроверка, ajax заявката обработва скрипта на сървъра, който просто използва същия този методcheckRule на класаForm и изпраща ajax отговор въз основа на резултата
Създаване на правила за валидиране
Помислете за пример за създаване на правило, като използвате примера за проверка за съществуването на променлива
Списък със съществуващи правила
- checkRuleRequired($rule, $data') - проверка за съществуване на елемент от масив. Връща true, ако елементът $rule[$element_id] съществува и не е null
Тук предлагам да се запознаете с практиката на валидиране на формуляр