CodeIgniter-formuliervalidatie van begin tot einde

Als ontwikkelaar van een webtoepassing is formuliervalidatie een cruciaal onderdeel van uw werk, en het moet niet worden onderschat omdat dit kan leiden tot beveiligingsfouten in uw toepassing. U moet dit als een must beschouwen als u streeft naar een professionele eindgebruikerservaring.

In dit artikel gaan we door de ingebouwde formuliervalidatiebibliotheek in het CodeIgniter-framework.

Dit zijn de hoogtepunten van het artikel van vandaag:

  • Basis formuliervalidatie
  • Cascading en prepping
  • Aangepaste foutmeldingen
  • Aangepaste validatie-callback
  • Validatieconfiguratie

Doorloop Basic Validation Rules

In deze sectie zullen we de basisformuliervalidatieconcepten doornemen in CodeIgniter.

Als onderdeel hiervan moeten we controller- en weergavebestanden maken. Het controllerbestand laadt de validatiebibliotheek en voert validatieregels uit tegen de ingediende formuliergegevens. Het weergavebestand bevat de XHTML-code en we houden het eenvoudig voor onze behoeften.

Laten we doorgaan en deze twee bestanden maken.

Maak het controllerbestand aan application / controllers / Validation.php met de volgende inhoud.

load-> helper (array ('form', 'url')); // load form_validation library $ this-> load-> library ('form_validation');  public function basic () // standaard vereist veld $ this-> form_validation-> set_rules ('text_field', 'Text Field One', 'required'); // basis vereist veld met minimale lengte $ this-> form_validation-> set_rules ('min_text_field', 'Text Field Two', 'required | min_length [8]'); // basis vereist veld met maximale lengte $ this-> form_validation-> set_rules ('max_text_field', 'Text Field Three', 'required | max_length [20]'); // basis vereist veld met exacte lengte $ this-> form_validation-> set_rules ('exact_text_field', 'Text Field Four', 'required | exact_length [12]'); // basis vereist veld maar alfabetten alleen $ this-> form_validation-> set_rules ('alphabets_text_field', 'Text Field Five', 'required | alpha'); // basis vereist veld maar alleen alfanumeriek $ this-> form_validation-> set_rules ('alphanumeric_text_field', 'Text Field Six', 'required | alpha numerical'); // standaard e-mailveld met e-mailvalidatie $ this-> form_validation-> set_rules ('valid_email_field', 'Email Field', 'required | valid_email'); // wachtwoordveld met bevestigingsveld dat overeenkomt met $ this-> form_validation-> set_rules ('password_field', 'Password One', 'required'); $ this-> form_validation-> set_rules ('password_confirmation_field', 'Password Confirmation Field', 'required | matches [password_field]'); // vereist basisveld met IPv4-validatie $ this-> form_validation-> set_rules ('valid_ip_field', 'Valid IP Field', 'required | valid_ip [ipv4]'); if ($ this-> form_validation-> run () == FALSE) $ this-> load-> view ('validate_form');  else // sjabloon voor succes laden ... echo "Het is allemaal goed!";  openbare functie cascade () // standaard vereist veld met gecascadeerde regels $ this-> form_validation-> set_rules ('text_field', 'Text Field One', 'required | alpha | min_length [8] | max_length [20]' ); if ($ this-> form_validation-> run () == FALSE) $ this-> load-> view ('validate_form');  else // sjabloon voor succes laden ... echo "Het is allemaal goed!";  public function prep () // basis vereist veld met trim prepping toegepast $ this-> form_validation-> set_rules ('min_text_field', 'Text Field Two', 'trim | required | min_length [8]'); if ($ this-> form_validation-> run () == FALSE) $ this-> load-> view ('validate_form');  else // sjabloon voor succes laden ... echo "Het is allemaal goed!";  openbare functie custom_message () // basis vereist veld met trim prepping toegepast $ this-> form_validation-> set_regels ('alphabets_text_field', 'Text Field Five', 'required | alpha', array ('required' => ' Voer tekstveld vijf in! ',' Alpha '=>' Alleen alfabetten alstublieft! ')); if ($ this-> form_validation-> run () == FALSE) $ this-> load-> view ('validate_form');  else // sjabloon voor succes laden ... echo "Het is allemaal goed!";  openbare functie custom_rule () // basis vereist veld met trim prepping toegepast $ this-> form_validation-> set_rules ('text_field', 'Text Field Five', 'callback_custom_validation'); if ($ this-> form_validation-> run () == FALSE) $ this-> load-> view ('validate_form');  else // sjabloon voor succes laden ... echo "Het is allemaal goed!";  openbare functie custom_validation ($ field_value) if ($ field_value == "|| $ field_value == 'demo') $ this-> form_validation-> set_message ('custom_validation'," Kom op, gedraag je niet zo spammer! "); return FALSE; else return TRUE; public function configuration () // als u groeps-id passeert, zullen alleen elementen in die groep gevalideerd worden // $ this-> form_validation-> run (' group_one ') if ($ this-> form_validation-> run () == FALSE) $ this-> load-> view (' validate_form '); else // laadsjabloon voor succes ... echo "It's all Good!" ;

Maak vervolgens het weergavebestand application / views / validate_form.php zoals hieronder getoond.

  Form Validation Example    

Form Validation Example

Tekstveld één (verplicht)
Tekstveld twee (minimale lengte)
Tekstveld drie (maximale lengte)
Tekstveld vier (exacte lengte)
Tekstveld vijf (alleen alfabetten)
Tekstveld zes (alleen alfanumeriek)
E-mailveld
Wachtwoordveld
Wachtwoord Bevestigingsveld
IP-veld

Met deze setup zou u een formulier moeten zien wanneer u http: // uw-codeigniter-site / validatie / basis uitvoert in uw browser. Probeer het in te dienen zonder een van de formuliervelden in te vullen en je ziet de lijst met foutmeldingen! Maak je geen zorgen als je niet begrijpt hoe het werkt, we zullen elk stuk van de code in detail doornemen.

Het verhaal begint met de __construct methode.

publieke functie __construct () parent :: __ construct (); // laad vorm en url helpers $ this-> load-> helper (array ('form', 'url')); // load form_validation library $ this-> load-> library ('form_validation'); 

Ik laad altijd de voorkeur aan het laden van algemene bibliotheken en helpers in de constructor van de controller zelf, omdat het een leuke gewoonte is om codeduplicatie elders in de controlemechanismemethoden te vermijden. Dat is precies wat we hierboven hebben gedaan: we laden het het formulier en url helpers zodat we de hulpprogramma's kunnen gebruiken die deze helpers tijdens de rest van de toepassing leveren.

Vervolgens laden we de formuliervalidatiebibliotheek zodat we formuliervalidatieregels kunnen koppelen aan formulierelementen, zoals we in de eerstvolgende sectie zullen zien.

Laten we de code van de basis- methode. Wat doet deze methode? Als je het met de KRIJGEN methode, wordt het formulier weergegeven en als het is aangeroepen met de POST methode, worden validatieregels toegepast op de ingediende gegevens en worden eventuele foutmeldingen weergegeven, samen met het formulier.

public function basic () // basis vereist veld $ this-> form_validation-> set_rules ('text_field', 'Text Field One', 'required'); // basis vereist veld met minimale lengte $ this-> form_validation-> set_rules ('min_text_field', 'Text Field Two', 'required | min_length [8]'); // basis vereist veld met maximale lengte $ this-> form_validation-> set_rules ('max_text_field', 'Text Field Three', 'required | max_length [20]'); // basis vereist veld met exacte lengte $ this-> form_validation-> set_rules ('exact_text_field', 'Text Field Four', 'required | exact_length [12]'); // basis vereist veld maar alfabetten alleen $ this-> form_validation-> set_rules ('alphabets_text_field', 'Text Field Five', 'required | alpha'); // basis vereist veld maar alleen alfanumeriek $ this-> form_validation-> set_rules ('alphanumeric_text_field', 'Text Field Six', 'required | alpha numerical'); // standaard e-mailveld met e-mailvalidatie $ this-> form_validation-> set_rules ('valid_email_field', 'Email Field', 'required | valid_email'); // wachtwoordveld met bevestigingsveld dat overeenkomt met $ this-> form_validation-> set_rules ('password_field', 'Password One', 'required'); $ this-> form_validation-> set_rules ('password_confirmation_field', 'Password Confirmation Field', 'required | matches [password_field]'); // vereist basisveld met IPv4-validatie $ this-> form_validation-> set_rules ('valid_ip_field', 'Valid IP Field', 'required | valid_ip [ipv4]'); if ($ this-> form_validation-> run () == FALSE) $ this-> load-> view ('validate_form');  else // sjabloon voor succes laden ... echo "Het is allemaal goed!"; 

Omdat we de formuliervalidatiebibliotheek al in de constructor hebben geladen, kunt u deze openen met behulp van de $ This-> form_validation conventie.

De set_rules methode wordt gebruikt om een ​​validatieregel te binden aan een formulierveld. Over het algemeen zijn er drie argumenten nodig:

  • Het eerste argument is de naam van een formulierveld.
  • Het tweede argument is een label dat wordt gebruikt om naar een formulierveld te verwijzen terwijl het foutbericht voor dat veld wordt weergegeven.
  • Het derde argument is de regel die u op een formulierveld wilt toepassen. De formuliervalidatiebibliotheek wordt geleverd met veel ingebouwde regels die u al zou kunnen gebruiken.

Laten we een paar van deze regels doornemen, zoals we ze bij de basismethode hebben gebruikt.

Een van de meest gebruikte regels is de verplicht regel, waardoor een formulierveld verplicht is.

// basis vereist veld $ this-> form_validation-> set_rules ('text_field', 'Text Field One', 'required');

Als u vervolgens een formulierveld van een bepaalde lengte wilt maken, kunt u de minimale lengte en maximale lengte reglement.

// basis vereist veld met minimale lengte $ this-> form_validation-> set_rules ('min_text_field', 'Text Field Two', 'required | min_length [8]'); // basis vereist veld met maximale lengte $ this-> form_validation-> set_rules ('max_text_field', 'Text Field Three', 'required | max_length [20]');

De eerste zorgt ervoor dat de min_text_field formulierveld is een verplicht veld en de gebruiker moet er minimaal acht tekens in invoeren. De tweede legt een limiet op de maximale tekens die kunnen worden ingevoerd in de max_text_field tekstveld, naast het een verplicht veld te maken.

U hebt misschien gemerkt dat we de | operator om meerdere regels tegelijkertijd toe te passen. Het wordt cascade genoemd en we komen er later op terug.

Aan de andere kant, als u een formulierveld met een exacte lengte wilt maken, kunt u de exact_length regel.

// basis vereist veld met exacte lengte $ this-> form_validation-> set_rules ('exact_text_field', 'Text Field Four', 'required | exact_length [12]');

Wat als u een formulierveld wilt valideren naar alfabetten of alleen alfanumeriek?

// basis vereist veld maar alfabetten alleen $ this-> form_validation-> set_rules ('alphabets_text_field', 'Text Field Five', 'required | alpha'); // basis vereist veld maar alleen alfanumeriek $ this-> form_validation-> set_rules ('alphanumeric_text_field', 'Text Field Six', 'required | alpha numerical');

De volgende kandidaat is de e-mailvalidatie.

// standaard e-mailveld met e-mailvalidatie $ this-> form_validation-> set_rules ('valid_email_field', 'Email Field', 'required | valid_email');

Vervolgens de wedstrijden Met regel kunt u de waarde van een formulierveld vergelijken met de waarde van een ander formulierveld. Het beste voorbeeld hiervan is het wachtwoordveld, dat moet overeenkomen met het wachtwoordbevestigingsveld wanneer u het formulier verzendt.

// wachtwoordveld met bevestigingsveldregel $ this-> form_validation-> set_rules ('password_field', 'Password One', 'required'); $ this-> form_validation-> set_rules ('password_confirmation_field', 'Password Confirmation Field', 'required | matches [password_field]');

Het laatste voorbeeld in onze basismethode gaat over het valideren van het IP-adres.

De valid_ip regel valideert het IP-adres tegen het eerste aangenomen argument. In het volgende voorbeeld zijn we alleen op zoek naar ipv4-type IP-adressen!

// vereist basisveld met IPv4-validatie $ this-> form_validation-> set_rules ('valid_ip_field', 'Valid IP Field', 'required | valid_ip [ipv4]');

Dus dat is het voor wat betreft basisvalidatie in CodeIgniter.

Hoe Cascading en Prepping werkt

In deze sectie zullen we trapsgewijs en prepping verkennen, waarmee u meerdere validatieregels in één keer kunt combineren.

Sterker nog, ik zou zeggen dat we cascades grondig hebben gebruikt in onze eerdere voorbeelden. Denk aan die pipe-operator die werd gebruikt om meerdere regels te combineren - en ja, de zogenaamde cascaderingsvalidatieregels.

Pak de code van de cascade methode.

publieke functie cascade () // basis vereist veld met cascade regels $ this-> form_validation-> set_rules ('text_field', 'Text Field One', 'required | alpha | min_length [8] | max_length [20]'); if ($ this-> form_validation-> run () == FALSE) $ this-> load-> view ('validate_form');  else // sjabloon voor succes laden ... echo "Het is allemaal goed!"; 

Zoals in het bovenstaande voorbeeld wordt getoond, hebben we vier validatieregels toegepast, gescheiden door de | operator naar de text_field tekstvak. Het moet dus elke regel voor de formuliervalidatie doorlopen om in dit geval te slagen!

Probeer het en kijk hoe het werkt!

Vervolgens is er een prepping waarmee u bepaalde bewerkingen kunt toepassen op de gegevens die worden ingediend. Vaker wel dan niet, wilt u voorloop- en volgspaties in de door de gebruiker ingezonden gegevens verwijderen. Waarschijnlijk is het eerste waar je aan denkt in dit geval de trimfunctie te gebruiken, en het goede nieuws is dat je het kunt gebruiken!

Dat is precies wat onze prep methode doet.

public function prep () // basis vereist veld met trim prepping toegepast $ this-> form_validation-> set_rules ('min_text_field', 'Text Field Two', 'trim | required | min_length [8]'); if ($ this-> form_validation-> run () == FALSE) $ this-> load-> view ('validate_form');  else // sjabloon voor succes laden ... echo "Het is allemaal goed!"; 

Zoals u kunt zien, hebben we het woord gebruikt trimmen in aanvulling op validatieregels. Dus de gegevens worden eerst ingekort en vervolgens door de andere validatieregels. In feite zou je elke PHP-functie kunnen gebruiken die één enkel argument nodig heeft volgens de CodeIgniter-documentatie.

Probeer ons voorbeeld uit te voeren door enkele volgspaties toe te voegen en te zien hoe het werkt.

Foutmeldingen aanpassen

Als je de kans hebt gehad om bovenstaande voorbeelden uit te voeren, is het je misschien opgevallen dat de foutmeldingen die aan de gebruiker worden getoond behoorlijk systematisch en machinaal gegenereerd zijn. Misschien wil je creatiever zijn en ze in bepaalde gevallen veranderen.

Laten we eens kijken hoe u het foutbericht voor elke validatieregel kunt wijzigen. Trek de code van de aangepast bericht methode.

openbare functie custom_message () // field with custom error message $ this-> form_validation-> set_rules ('alphabets_text_field', 'Text Field Five', 'required | alpha', array ('required' => 'Voer een tekstveld in Vijf! ',' Alpha '=>' Alleen alfabetten alstublieft! ')); if ($ this-> form_validation-> run () == FALSE) $ this-> load-> view ('validate_form');  else // sjabloon voor succes laden ... echo "Het is allemaal goed!"; 

Let op het vierde argument dat aan de set_rules methode. Het bevat een reeks aangepaste validatieberichten voor elke validatieregel en de sleutel van elk array-item is de validatieregel zelf.

array ('verplicht' => 'Voer tekstveld vijf in!', 'alpha' => 'Alleen alfabetten alstublieft!')

Probeer het eens, en u zou onze aangepaste foutmeldingen moeten zien! Best cool, he?

Aangepaste validatie-callbacks

Hoewel de ingebouwde validatiebibliotheek al een handvol validatieregels bevat, is er altijd een behoefte om een ​​aangepaste validatie te maken in uw dagelijkse ontwikkelingswerk. Dat is precies wat we in deze sectie zullen bespreken.

Om dit aan te tonen, maken we een aangepaste validatie-callback en later zullen we zien hoe we deze kunnen gebruiken samen met de set_rules methode.

Om te beginnen, laten we even kijken naar de custom_rule methode.

openbare functie custom_rule () // veld met aangepaste validatie callback geslaagd voor $ this-> form_validation-> set_rules ('text_field', 'Text Field Five', 'callback_custom_validation'); if ($ this-> form_validation-> run () == FALSE) $ this-> load-> view ('validate_form');  else // sjabloon voor succes laden ... echo "Het is allemaal goed!"; 

Het is niet anders dan het gebruikelijke set_rules method call, behalve dat we de aangepaste validatie-callback hebben opgegeven custom_validation in plaats van een kernvalidatieregel. Het belangrijkste om op te merken hier is dat u de aangepaste validatie-callback vooraf moet plaatsen met Bel terug_ wanneer je het als een argument doorgeeft.

Laten we vervolgens de aangepaste validatie-callback implementeren.

openbare functie custom_validation ($ field_value) if ($ field_value == "|| $ field_value == 'demo') $ this-> form_validation-> set_message ('custom_validation'," Kom op, gedraag je niet als spammer! "); return FALSE; else return TRUE;

Wanneer uw aangepaste validatie-callback wordt aangeroepen, wordt de door de gebruiker ingevoerde waarde doorgegeven als het eerste argument. Dus de $ FIELD_VALUE bevat een waarde die is ingevoerd door een gebruiker, waartegen u uw aangepaste validatielogica kunt implementeren.

In het bovenstaande voorbeeld zou u het foutbericht moeten zien als u een blanco waarde of opgeeft demonstratie in het tekstveld Tekstveld vijf. Het is belangrijk om te weten dat wanneer u het foutbericht instelt met behulp van de set_message methode, is het eerste argument de naam van de aangepaste validatie callback-methode zelf.

En dat is het verhaal van callbacks voor aangepaste validatie.

Last but not least, het is de validatieconfiguratie die enige aandacht verdient als we naar de conclusie van dit artikel toe gaan.

Validatieconfiguratie

Als ontwikkelaar van CodeIgniter zou u al bekend moeten zijn met de config directory, waarmee u verschillende aspecten van uw CodeIgniter-toepassing kunt configureren.

Bijvoorbeeld, database.php kunt u de database gerelateerde instellingen definiëren, terwijl autoload.php kunt u de componenten definiëren die automatisch moeten worden geladen tijdens het bootstrappen van een toepassing.

Op dezelfde manier zou je het kunnen maken form_validation.php bestand onder de config directory en gebruik dat bestand om valideringsregels op applicatieniveau te definiëren die globaal kunnen worden gebruikt. Als dat vreemd voor je klinkt, is er geen betere manier om het te begrijpen dan als je naar een praktisch voorbeeld kijkt.

Maak het bestand aan application / config / form_validation.php met de volgende inhoud.

 'text_field', 'label' => 'Text Field One', 'rules' => 'required'), array ('field' => 'min_text_field', 'label' => 'Tekstveld Twee', 'regels' => 'required | min_length [8]'), array ('field' => 'max_text_field', 'label' => 'Text Field Three', 'rules' => 'required | max_length [20]'));

Laten we nu snel kijken naar wat onze configuratie methode ziet eruit als.

openbare functieconfiguratie () // als u groeps-id passeert, worden alleen elementen in die groep gevalideerd // $ this-> form_validation-> run ('group_one') if ($ this-> form_validation-> run () = = ONWAAR) $ this-> load-> view ('validate_form');  else // sjabloon voor succes laden ... echo "Het is allemaal goed!"; 

Probeer http: // uw-codeigniter-site / validatie / configuratie uit te voeren en een leeg formulier in te dienen. U ziet foutmeldingen voor drie formuliervelden! Maar wacht, waar komen ze vandaan, omdat we in de eerste plaats geen validatieregels in onze configuratiemethode hebben ingesteld?

Gebruikers met scherpe ogen zouden hebben opgemerkt dat het automatisch wordt opgehaald uit het validatieconfiguratiebestand dat is gedefinieerd op application / config / form_validation.php. Is dat niet geweldig? Hiermee kunt u de regels op één plek centraliseren en de codeduplicatie in actiemethoden verminderen.

In feite zou u de regels kunnen groeperen en validatie toepassen op de velden van slechts een bepaalde groep. Laten we kijken hoe dat moet.

Vervang de code in application / config / form_validation.php met het volgende.

 array (array ('field' => 'text_field', 'label' => 'Text Field One', 'rules' => 'required')), 'group_two' => array (array ('field' => ' min_text_field ',' label '=>' Tekstveld Twee ',' regels '=>' vereist | min_length [8] '), array (' field '=>' max_text_field ',' label '=>' Tekstveld drie ' , 'rules' => 'required | max_length [20]')));

In uw configuratie methode, zoek de volgende regel:

if ($ this-> form_validation-> run () == FALSE)

En vervang het door:

if ($ this-> form_validation-> run ('group_one') == FALSE)

Probeer nu een leeg formulier in te dienen en u ziet alleen een fout Tekstveld één. Dat komt omdat we zijn geslaagd group_one als groeps-id, dus alleen de elementen in die groep worden gevalideerd.

Laten we tot slot eens kijken naar het type configuratie waarmee u regels kunt definiëren op basis van de URL.

Vervang de code in application / config / form_validation.php met de volgende code.

$ config = array ('validation / configuration' => array (array ('field' => 'max_text_field', 'label' => 'Text Field Three', 'rules' => 'required | max_length [20]') ));

In dit type configuratie moet u een combinatie van de naam van de controller en de methode gebruiken, gescheiden door de / karakter. Op deze manier kunt u in één keer regels voor verschillende actiemethoden definiëren.

Nu zou u het foutbericht moeten zien Tekstveld Drie moet u proberen een leeg formulier in te dienen op http: // uw-codeigniter-site / validatie / configuratie.

En daarmee is ook het verhaal van de validatieconfiguratie en dit artikel ten einde!

Conclusie

In dit artikel hebben we vormvalidatie grondig besproken in CodeIgniter. 

We zijn onze reis begonnen met de basisvalidatieregels en vervolgens zijn we overgeschakeld naar geavanceerdere onderwerpen zoals cascading, prepping en configuratie validatie.

Ik hoop dat je dit artikel leuk vond en je kunt je waardevolle mening delen via de onderstaande feed!