CodeIgniter-Formularvalidierung: Von Anfang bis Ende
German (Deutsch) translation by Tatsiana Bochkareva (you can also view the original English article)
Als Entwickler von Webanwendungen ist die Formularvalidierung ein wesentlicher Bestandteil Ihrer Arbeit und sollte nicht unterschätzt werden, da sie zu Sicherheitslücken in Ihrer Anwendung führen könnte. Sie sollten es als ein Muss betrachten, wenn Sie bestrebt sind, ein professionelles Endbenutzererlebnis zu bieten.
In diesem Artikel werden wir die integrierte Formularvalidierungsbibliothek im CodeIgniter-Framework durchgehen.
Hier die Highlights des heutigen Artikels:
- Grundlegende Formularvalidierung
- Kaskadieren und Vorbereiten
- Benutzerdefinierte Fehlermeldungen
- Benutzerdefinierter Validierungsrückruf
- Validierungskonfiguration
Gehen Sie die grundlegenden Validierungsregeln durch
In diesem Abschnitt gehen wir die grundlegenden Konzepte der Formularvalidierung in CodeIgniter durch.
Als Teil davon müssen wir Controller- und View-Dateien erstellen. Die Controller-Datei lädt die Validierungsbibliothek und führt Validierungsregeln für die übermittelten Formulardaten aus. Die View-Datei enthält den XHTML-Code des Formulars, und wir werden es für unsere Bedürfnisse einfach halten.
Lassen Sie uns fortfahren und diese beiden Dateien erstellen.
Erstellen Sie die Controller-Datei application/controllers/Validation.php
mit folgendem Inhalt.
1 |
<?php
|
2 |
// application/controllers/Validation.php
|
3 |
defined('BASEPATH') OR exit('No direct script access allowed'); |
4 |
|
5 |
class Validation extends CI_Controller { |
6 |
public function __construct() |
7 |
{
|
8 |
parent::__construct(); |
9 |
|
10 |
// load form and url helpers
|
11 |
$this->load->helper(array('form', 'url')); |
12 |
|
13 |
// load form_validation library
|
14 |
$this->load->library('form_validation'); |
15 |
}
|
16 |
|
17 |
public function basic() |
18 |
{
|
19 |
// basic required field
|
20 |
$this->form_validation->set_rules('text_field', 'Text Field One', 'required'); |
21 |
|
22 |
// basic required field with minimum length
|
23 |
$this->form_validation->set_rules('min_text_field', 'Text Field Two', 'required|min_length[8]'); |
24 |
|
25 |
// basic required field with maximum length
|
26 |
$this->form_validation->set_rules('max_text_field', 'Text Field Three', 'required|max_length[20]'); |
27 |
|
28 |
// basic required field with exact length
|
29 |
$this->form_validation->set_rules('exact_text_field', 'Text Field Four', 'required|exact_length[12]'); |
30 |
|
31 |
// basic required field but alphabets only
|
32 |
$this->form_validation->set_rules('alphabets_text_field', 'Text Field Five', 'required|alpha'); |
33 |
|
34 |
// basic required field but alphanumeric only
|
35 |
$this->form_validation->set_rules('alphanumeric_text_field', 'Text Field Six', 'required|alpha_numeric'); |
36 |
|
37 |
// basic email field with email validation
|
38 |
$this->form_validation->set_rules('valid_email_field', 'Email Field', 'required|valid_email'); |
39 |
|
40 |
// password field with confirmation field matching
|
41 |
$this->form_validation->set_rules('password_field', 'Password One', 'required'); |
42 |
$this->form_validation->set_rules('password_confirmation_field', 'Password Confirmation Field', 'required|matches[password_field]'); |
43 |
|
44 |
// basic required field with IPv4 validation
|
45 |
$this->form_validation->set_rules('valid_ip_field', 'Valid IP Field', 'required|valid_ip[ipv4]'); |
46 |
|
47 |
if ($this->form_validation->run() == FALSE) |
48 |
{
|
49 |
$this->load->view('validate_form'); |
50 |
}
|
51 |
else
|
52 |
{
|
53 |
// load success template...
|
54 |
echo "It's all Good!"; |
55 |
}
|
56 |
}
|
57 |
|
58 |
public function cascade() |
59 |
{
|
60 |
// basic required field with cascaded rules
|
61 |
$this->form_validation->set_rules('text_field', 'Text Field One', 'required|alpha|min_length[8]|max_length[20]'); |
62 |
|
63 |
if ($this->form_validation->run() == FALSE) |
64 |
{
|
65 |
$this->load->view('validate_form'); |
66 |
}
|
67 |
else
|
68 |
{
|
69 |
// load success template...
|
70 |
echo "It's all Good!"; |
71 |
}
|
72 |
}
|
73 |
|
74 |
public function prep() |
75 |
{
|
76 |
// basic required field with trim prepping applied
|
77 |
$this->form_validation->set_rules('min_text_field', 'Text Field Two', 'trim|required|min_length[8]'); |
78 |
|
79 |
if ($this->form_validation->run() == FALSE) |
80 |
{
|
81 |
$this->load->view('validate_form'); |
82 |
}
|
83 |
else
|
84 |
{
|
85 |
// load success template...
|
86 |
echo "It's all Good!"; |
87 |
}
|
88 |
}
|
89 |
|
90 |
public function custom_message() |
91 |
{
|
92 |
// basic required field with trim prepping applied
|
93 |
$this->form_validation->set_rules('alphabets_text_field', 'Text Field Five', 'required|alpha', |
94 |
array('required'=>'Please enter Text Field Five!','alpha'=>'Only alphabets please!')); |
95 |
|
96 |
if ($this->form_validation->run() == FALSE) |
97 |
{
|
98 |
$this->load->view('validate_form'); |
99 |
}
|
100 |
else
|
101 |
{
|
102 |
// load success template...
|
103 |
echo "It's all Good!"; |
104 |
}
|
105 |
}
|
106 |
|
107 |
public function custom_rule() |
108 |
{
|
109 |
// basic required field with trim prepping applied
|
110 |
$this->form_validation->set_rules('text_field', 'Text Field Five', 'callback_custom_validation'); |
111 |
|
112 |
if ($this->form_validation->run() == FALSE) |
113 |
{
|
114 |
$this->load->view('validate_form'); |
115 |
}
|
116 |
else
|
117 |
{
|
118 |
// load success template...
|
119 |
echo "It's all Good!"; |
120 |
}
|
121 |
}
|
122 |
|
123 |
public function custom_validation($field_value) |
124 |
{
|
125 |
if ($field_value == '' || $field_value == 'demo') |
126 |
{
|
127 |
$this->form_validation->set_message('custom_validation', "Come on, don't act like spammer!"); |
128 |
return FALSE; |
129 |
}
|
130 |
else
|
131 |
{
|
132 |
return TRUE; |
133 |
}
|
134 |
}
|
135 |
|
136 |
public function configuration() |
137 |
{
|
138 |
// if you pass group id, only elements in that group will be validated
|
139 |
// $this->form_validation->run('group_one')
|
140 |
if ($this->form_validation->run() == FALSE) |
141 |
{
|
142 |
$this->load->view('validate_form'); |
143 |
}
|
144 |
else
|
145 |
{
|
146 |
// load success template...
|
147 |
echo "It's all Good!"; |
148 |
}
|
149 |
}
|
150 |
}
|
Danach erstellen Sie die Ansichtsdatei application/views/validate_form.php
,wie unten gezeigt.
1 |
<html>
|
2 |
<head>
|
3 |
<title>Form Validation Example</title> |
4 |
<style>
|
5 |
.field_title{font-size: 13px;font-family:Arial;width: 300px;margin-top: 10px} |
6 |
.form_error{font-size: 13px;font-family:Arial;color:red;font-style:italic} |
7 |
</style>
|
8 |
</head>
|
9 |
|
10 |
<body>
|
11 |
<div class="form_error"> |
12 |
<?php echo validation_errors(); ?> |
13 |
</div>
|
14 |
|
15 |
<?php echo form_open(); ?> |
16 |
|
17 |
<h2>Form Validation Example</h2> |
18 |
|
19 |
<div>
|
20 |
<div class="field_title">Text Field One (Required)</div> |
21 |
<input type="text" name="text_field" value="<?php echo set_value('text_field'); ?>" size="30" /> |
22 |
</div>
|
23 |
|
24 |
<div>
|
25 |
<div class="field_title">Text Field Two (Minimum length)</div> |
26 |
<input type="text" name="min_text_field" value="<?php echo set_value('min_text_field'); ?>" size="30" /> |
27 |
</div>
|
28 |
|
29 |
<div>
|
30 |
<div class="field_title">Text Field Three (Maximum length)</div> |
31 |
<input type="text" name="max_text_field" value="<?php echo set_value('max_text_field'); ?>" size="30" /> |
32 |
</div>
|
33 |
|
34 |
<div>
|
35 |
<div class="field_title">Text Field Four (Exact length)</div> |
36 |
<input type="text" name="exact_text_field" value="<?php echo set_value('exact_text_field'); ?>" size="30" /> |
37 |
</div>
|
38 |
|
39 |
<div>
|
40 |
<div class="field_title">Text Field Five (Alphabets only)</div> |
41 |
<input type="text" name="alphabets_text_field" value="<?php echo set_value('alphabets_text_field'); ?>" size="30" /> |
42 |
</div>
|
43 |
|
44 |
<div>
|
45 |
<div class="field_title">Text Field Six (Alphanumeric only)</div> |
46 |
<input type="text" name="alphanumeric_text_field" value="<?php echo set_value('alphanumeric_text_field'); ?>" size="30" /> |
47 |
</div>
|
48 |
|
49 |
<div>
|
50 |
<div class="field_title">Email Field</div> |
51 |
<input type="text" name="valid_email_field" value="<?php echo set_value('valid_email_field'); ?>" size="30" /> |
52 |
</div>
|
53 |
|
54 |
<div>
|
55 |
<div class="field_title">Password Field</div> |
56 |
<input type="password" name="password_field" value="" size="30" /> |
57 |
</div>
|
58 |
|
59 |
<div>
|
60 |
<div class="field_title">Password Confirmation Field</div> |
61 |
<input type="password" name="password_confirmation_field" value="" size="30" /> |
62 |
</div>
|
63 |
|
64 |
<div>
|
65 |
<div class="field_title">IP Field</div> |
66 |
<input type="text" name="valid_ip_field" value="<?php echo set_value('valid_ip_field'); ?>" size="30" /> |
67 |
</div>
|
68 |
|
69 |
<div class="field_title"> |
70 |
<input type="submit" value="Submit" /> |
71 |
</div>
|
72 |
|
73 |
</form>
|
74 |
</body>
|
75 |
</html>
|
Bei diesem Setup sollten Sie ein Formular sehen, wenn Sie http://your-codeigniter-site/validation/basic in Ihrem Browser ausführen. Versuchen Sie, es abzusenden, ohne eines der Formularfelder auszufüllen, und Sie sehen die Liste der Fehlermeldungen! Machen Sie sich keine Sorgen, wenn Sie nicht verstehen, wie es funktioniert, denn wir werden jeden Code im Detail durchgehen.
Die Geschichte beginnt mit der Methode __construct
.
1 |
public function __construct() |
2 |
{
|
3 |
parent::__construct(); |
4 |
|
5 |
// load form and url helpers
|
6 |
$this->load->helper(array('form', 'url')); |
7 |
|
8 |
// load form_validation library
|
9 |
$this->load->library('form_validation'); |
10 |
}
|
Ich bevorzuge es immer, gängige Bibliotheken und Helfer in den Konstruktor des Controllers selbst zu laden, da es eine nette Angewohnheit ist, Codeduplizierung an anderer Stelle in Controller-Methoden zu vermeiden. Genau das haben wir oben getan – wir laden die form
und url
-Hilfsprogramme, damit wir die von diesen Hilfsprogrammen bereitgestellten Dienstprogrammmethoden für den Rest der Anwendung verwenden können.
Dann laden wir die Formularvalidierungsbibliothek, damit wir unsere Formularvalidierungsregeln an Formularelemente binden können, wie wir im nächsten Abschnitt sehen werden.
Gehen wir den Code der basic
-Methode durch. Was macht diese Methode? Wenn Sie es mit der GET
-Methode aufrufen, zeigt es das Formular an, und wenn es mit der POST
-Methode aufgerufen wurde, wendet es Validierungsregeln auf die übermittelten Daten an und zeigt eventuelle Fehlermeldungen zusammen mit dem Formular an.
1 |
public function basic() |
2 |
{
|
3 |
// basic required field
|
4 |
$this->form_validation->set_rules('text_field', 'Text Field One', 'required'); |
5 |
|
6 |
// basic required field with minimum length
|
7 |
$this->form_validation->set_rules('min_text_field', 'Text Field Two', 'required|min_length[8]'); |
8 |
|
9 |
// basic required field with maximum length
|
10 |
$this->form_validation->set_rules('max_text_field', 'Text Field Three', 'required|max_length[20]'); |
11 |
|
12 |
// basic required field with exact length
|
13 |
$this->form_validation->set_rules('exact_text_field', 'Text Field Four', 'required|exact_length[12]'); |
14 |
|
15 |
// basic required field but alphabets only
|
16 |
$this->form_validation->set_rules('alphabets_text_field', 'Text Field Five', 'required|alpha'); |
17 |
|
18 |
// basic required field but alphanumeric only
|
19 |
$this->form_validation->set_rules('alphanumeric_text_field', 'Text Field Six', 'required|alpha_numeric'); |
20 |
|
21 |
// basic email field with email validation
|
22 |
$this->form_validation->set_rules('valid_email_field', 'Email Field', 'required|valid_email'); |
23 |
|
24 |
// password field with confirmation field matching
|
25 |
$this->form_validation->set_rules('password_field', 'Password One', 'required'); |
26 |
$this->form_validation->set_rules('password_confirmation_field', 'Password Confirmation Field', 'required|matches[password_field]'); |
27 |
|
28 |
// basic required field with IPv4 validation
|
29 |
$this->form_validation->set_rules('valid_ip_field', 'Valid IP Field', 'required|valid_ip[ipv4]'); |
30 |
|
31 |
if ($this->form_validation->run() == FALSE) |
32 |
{
|
33 |
$this->load->view('validate_form'); |
34 |
}
|
35 |
else
|
36 |
{
|
37 |
// load success template...
|
38 |
echo "It's all Good!"; |
39 |
}
|
40 |
}
|
Da wir die Formularvalidierungsbibliothek bereits im Konstruktor geladen haben, können Sie mit der Konvention $this->form_validation
darauf zugreifen.
Die Methode set_rules
wird verwendet, um eine Validierungsregel an ein Formularfeld zu binden. Im Allgemeinen braucht es drei Argumente:
- Das erste Argument ist der Name eines Formularfelds.
- Das zweite Argument ist ein Label, das verwendet wird, um auf ein Formularfeld zu verweisen, während die Fehlermeldung für dieses Feld angezeigt wird.
- Das dritte Argument ist die Regel, die Sie auf ein Formularfeld anwenden möchten. Die Formularvalidierungsbibliothek enthält viele integrierte Regeln, die Sie bereits verwenden können.
Lassen Sie uns einige dieser Regeln durchgehen, wie wir sie in der Grundmethode verwendet haben.
Eine der am häufigsten verwendeten Regeln ist die required
-Regel, die ein Formularfeld obligatorisch macht.
1 |
// basic required field
|
2 |
$this->form_validation->set_rules('text_field', 'Text Field One', 'required'); |
Wenn Sie dann ein Formularfeld mit einer bestimmten Länge erstellen möchten, können Sie die Regeln min_length
und max_length
verwenden.
1 |
// basic required field with minimum length
|
2 |
$this->form_validation->set_rules('min_text_field', 'Text Field Two', 'required|min_length[8]'); |
3 |
|
4 |
// basic required field with maximum length
|
5 |
$this->form_validation->set_rules('max_text_field', 'Text Field Three', 'required|max_length[20]'); |
Die erste stellt sicher, dass das Formularfeld min_text_field
ein Pflichtfeld ist und der Benutzer darin mindestens acht Zeichen eingeben muss. Die zweite schränkt die maximale Anzahl von Zeichen ein, die in das Textfeld max_text_field
eingegeben werden können, und macht es zusätzlich zu einem Pflichtfeld.
Sie haben vielleicht bemerkt, dass wir das |
Operator, um mehrere Regeln gleichzeitig anzuwenden. Es heißt Kaskadierung, und wir werden später darauf zurückkommen.
Wenn Sie andererseits ein Formularfeld mit einer genauen Länge erstellen möchten, können Sie die Regel exact_length
verwenden.
1 |
// basic required field with exact length
|
2 |
$this->form_validation->set_rules('exact_text_field', 'Text Field Four', 'required|exact_length[12]'); |
Was ist, wenn Sie ein Formularfeld nur mit Alphabeten oder alphanumerischen Zeichen validieren möchten?
1 |
// basic required field but alphabets only
|
2 |
$this->form_validation->set_rules('alphabets_text_field', 'Text Field Five', 'required|alpha'); |
3 |
|
4 |
// basic required field but alphanumeric only
|
5 |
$this->form_validation->set_rules('alphanumeric_text_field', 'Text Field Six', 'required|alpha_numeric'); |
Der nächste Kandidat ist die E-Mail-Validierung.
1 |
// basic email field with email validation
|
2 |
$this->form_validation->set_rules('valid_email_field', 'Email Field', 'required|valid_email'); |
Weiter können Sie mit der matches
-Regel den Wert eines Formularfelds mit dem Wert eines anderen Formularfelds vergleichen. Das beste Beispiel dafür ist das Passwortfeld, das beim Absenden des Formulars mit dem Passwortbestätigungsfeld übereinstimmen muss.
1 |
// password field with confirmation field matching rule
|
2 |
$this->form_validation->set_rules('password_field', 'Password One', 'required'); |
3 |
$this->form_validation->set_rules('password_confirmation_field', 'Password Confirmation Field', 'required|matches[password_field]'); |
Das letzte Beispiel in unserer Basismethode befasst sich mit der Überprüfung der IP-Adresse.
Die valid_ip
-Regel überprüft die IP-Adresse anhand des ersten übergebenen Arguments. Im folgenden Beispiel suchen wir nur nach IPv4-IP-Adressen!
1 |
// basic required field with IPv4 validation
|
2 |
$this->form_validation->set_rules('valid_ip_field', 'Valid IP Field', 'required|valid_ip[ipv4]'); |
Soweit die grundlegende Validierung in CodeIgniter.
Wie man Kaskadieren und Vorbereiten funktioniert
In diesem Abschnitt untersuchen wir Kaskadierung und Vorbereitung, mit denen Sie mehrere Validierungsregeln auf einmal kombinieren können.
Tatsächlich würde ich sagen, dass wir in unseren früheren Beispielen die Kaskadierung gründlich genutzt haben. Erinnern Sie sich an den Pipe-Operator, der verwendet wurde, um mehrere Regeln zu kombinieren – und ja, die sogenannten kaskadierenden Validierungsregeln.
Holen Sie sich den Code der cascade
-Methode.
1 |
public function cascade() |
2 |
{
|
3 |
// basic required field with cascaded rules
|
4 |
$this->form_validation->set_rules('text_field', 'Text Field One', 'required|alpha|min_length[8]|max_length[20]'); |
5 |
|
6 |
if ($this->form_validation->run() == FALSE) |
7 |
{
|
8 |
$this->load->view('validate_form'); |
9 |
}
|
10 |
else
|
11 |
{
|
12 |
// load success template...
|
13 |
echo "It's all Good!"; |
14 |
}
|
15 |
}
|
Wie im obigen Beispiel gezeigt, haben wir vier Validierungsregeln angewendet, die durch |
getrennt sind -Operator in das Textfeld text_field
. Es muss also jede einzelne Regel durchlaufen, damit die Formularvalidierung in diesem Fall erfolgreich ist!
Probieren Sie es aus und sehen Sie, wie es funktioniert!
Dann gibt es eine Vorbereitung, mit der Sie bestimmte Vorgänge auf die gesendeten Daten anwenden können. In den meisten Fällen möchten Sie führende und nachgestellte Leerzeichen in den vom Benutzer übermittelten Daten entfernen. Das erste, was Ihnen in diesem Fall wahrscheinlich in den Sinn kommt, ist die Trimmfunktion, und die gute Nachricht ist, dass Sie sie verwenden können!
Genau das macht unsere prep
-Methode.
1 |
public function prep() |
2 |
{
|
3 |
// basic required field with trim prepping applied
|
4 |
$this->form_validation->set_rules('min_text_field', 'Text Field Two', 'trim|required|min_length[8]'); |
5 |
|
6 |
if ($this->form_validation->run() == FALSE) |
7 |
{
|
8 |
$this->load->view('validate_form'); |
9 |
}
|
10 |
else
|
11 |
{
|
12 |
// load success template...
|
13 |
echo "It's all Good!"; |
14 |
}
|
15 |
}
|
Wie Sie sehen, haben wir zusätzlich zu den Validierungsregeln das Wort trim
verwendet. Die Daten werden also zuerst getrimmt und durchlaufen dann die anderen Validierungsregeln. Tatsächlich können Sie jede PHP-Funktion verwenden, die gemäß der CodeIgniter-Dokumentation ein einzelnes Argument akzeptiert.
Versuchen Sie, unser Beispiel auszuführen, indem Sie einige nachgestellte Leerzeichen hinzufügen, und sehen Sie, wie es funktioniert.
Anpassen von Fehlermeldungen
Wenn Sie die obigen Beispiele ausführen konnten, ist Ihnen vielleicht aufgefallen, dass die dem Benutzer angezeigten Fehlermeldungen ziemlich systematisch und maschinell generiert werden. Vielleicht möchten Sie kreativer sein und sie in bestimmten Fällen ändern.
Sehen wir uns an, wie Sie die Fehlermeldung für jede Validierungsregel ändern können. Ziehen Sie den Code der Methode custom_message
ein.
1 |
public function custom_message() |
2 |
{
|
3 |
// field with custom error message
|
4 |
$this->form_validation->set_rules('alphabets_text_field', 'Text Field Five', 'required|alpha', |
5 |
array('required'=>'Please enter Text Field Five!','alpha'=>'Only alphabets please!')); |
6 |
|
7 |
if ($this->form_validation->run() == FALSE) |
8 |
{
|
9 |
$this->load->view('validate_form'); |
10 |
}
|
11 |
else
|
12 |
{
|
13 |
// load success template...
|
14 |
echo "It's all Good!"; |
15 |
}
|
16 |
}
|
Beachten Sie das vierte Argument, das der Methode set_rules
übergeben wird. Es enthält ein Array von benutzerdefinierten Validierungsnachrichten für jede Validierungsregel, und der Schlüssel jedes Array-Elements ist die Validierungsregel selbst.
1 |
array( |
2 |
'required'=>'Please enter Text Field Five!', |
3 |
'alpha'=>'Only alphabets please!' |
4 |
)
|
Probieren Sie es aus und Sie sollten unsere benutzerdefinierten Fehlermeldungen sehen! Ziemlich cool, oder?
Benutzerdefinierte Validierungsrückrufe
Obwohl die integrierte Validierungsbibliothek bereits eine Handvoll Validierungsregeln bereitstellt, müssen Sie in Ihrer täglichen Entwicklungsarbeit immer eine benutzerdefinierte erstellen. Genau das werden wir in diesem Abschnitt besprechen.
Um dies zu demonstrieren, erstellen wir einen benutzerdefinierten Validierungsrückruf, und später werden wir sehen, wie er zusammen mit der set_rules
-Methode verwendet wird.
Werfen wir zunächst einen kurzen Blick auf die Methode custom_rule
.
1 |
public function custom_rule() |
2 |
{
|
3 |
// field with custom validation callback passed
|
4 |
$this->form_validation->set_rules('text_field', 'Text Field Five', 'callback_custom_validation'); |
5 |
|
6 |
if ($this->form_validation->run() == FALSE) |
7 |
{
|
8 |
$this->load->view('validate_form'); |
9 |
}
|
10 |
else
|
11 |
{
|
12 |
// load success template...
|
13 |
echo "It's all Good!"; |
14 |
}
|
15 |
}
|
Es unterscheidet sich nicht vom üblichen Methodenaufruf set_rules
, außer dass wir den benutzerdefinierten Validierungsrückruf custom_validation
anstelle einer Kernvalidierungsregel bereitgestellt haben. Wichtig ist hier, dass Sie dem benutzerdefinierten Validierungsrückruf callback_
voranstellen müssen, wenn Sie ihn als Argument übergeben.
Als Nächstes implementieren wir den benutzerdefinierten Validierungsrückruf.
1 |
public function custom_validation($field_value) |
2 |
{
|
3 |
if ($field_value == '' || $field_value == 'demo') |
4 |
{
|
5 |
$this->form_validation->set_message('custom_validation', "Come on, don't act like spammer!"); |
6 |
return FALSE; |
7 |
}
|
8 |
else
|
9 |
{
|
10 |
return TRUE; |
11 |
}
|
12 |
}
|
Wenn Ihr benutzerdefinierter Validierungsrückruf aufgerufen wird, wird der vom Benutzer eingegebene Wert als erstes Argument übergeben. Der $field_value
enthält also einen von einem Benutzer eingegebenen Wert, gegen den Sie Ihre benutzerdefinierte Validierungslogik implementieren können.
Im obigen Beispiel sollten Sie die Fehlermeldung sehen, wenn Sie entweder einen leeren Wert oder eine demo
in das Textfeld Text Field Five
eingeben. Beachten Sie, dass beim Festlegen der Fehlermeldung mit der Methode set_message
das erste Argument der Name der benutzerdefinierten Rückrufmethode für die Validierung selbst ist.
Und das ist die Geschichte von Rückrufen zur benutzerdefinierten Validierung.
Last but not least verdient die Validierungskonfiguration einige Aufmerksamkeit, wenn wir uns dem Abschluss dieses Artikels nähern.
Validierungskonfiguration
Als CodeIgniter-Entwickler sollten Sie bereits mit dem config
-Verzeichnis vertraut sein, mit dem Sie verschiedene Aspekte Ihrer CodeIgniter-Anwendung konfigurieren können.
Mit database.php
können Sie beispielsweise die datenbankbezogenen Einstellungen definieren, während Sie mit autoload.php
die Komponenten definieren können, die beim Bootstrapping einer Anwendung automatisch geladen werden sollen.
Auf die gleiche Weise könnten Sie die Datei form_validation.php
im Verzeichnis config
erstellen und diese Datei verwenden, um Validierungsregeln auf Anwendungsebene zu definieren, die global verwendet werden können. Wenn Ihnen das fremd vorkommt, gibt es keinen besseren Weg, es zu verstehen, als sich ein praktisches Beispiel anzusehen.
Erstellen Sie die Datei application/config/form_validation.php
mit dem folgenden Inhalt.
1 |
<?php
|
2 |
$config = array( |
3 |
array( |
4 |
'field' => 'text_field', |
5 |
'label' => 'Text Field One', |
6 |
'rules' => 'required' |
7 |
),
|
8 |
array( |
9 |
'field' => 'min_text_field', |
10 |
'label' => 'Text Field Two', |
11 |
'rules' => 'required|min_length[8]' |
12 |
),
|
13 |
array( |
14 |
'field' => 'max_text_field', |
15 |
'label' => 'Text Field Three', |
16 |
'rules' => 'required|max_length[20]' |
17 |
)
|
18 |
);
|
Sehen wir uns nun kurz an, wie unsere configuration
-Methode aussieht.
1 |
public function configuration() |
2 |
{
|
3 |
// if you pass group id, only elements in that group will be validated
|
4 |
// $this->form_validation->run('group_one')
|
5 |
if ($this->form_validation->run() == FALSE) |
6 |
{
|
7 |
$this->load->view('validate_form'); |
8 |
}
|
9 |
else
|
10 |
{
|
11 |
// load success template...
|
12 |
echo "It's all Good!"; |
13 |
}
|
14 |
}
|
Versuchen Sie, http://your-codigniter-site/validation/configuration auszuführen und senden Sie ein leeres Formular. Sie sehen Fehlermeldungen für drei Formularfelder! Aber warten Sie, woher kommen sie, da wir in unserer Konfigurationsmethode überhaupt keine Validierungsregeln eingerichtet haben?
Benutzer mit scharfen Augen hätten bemerkt, dass es automatisch aus der Validierungskonfigurationsdatei entnommen wird, die unter application/config/form_validation.php
definiert ist. Ist das nicht erstaunlich? Es ermöglicht Ihnen, die Regeln an einem Ort zu zentralisieren und die Codeduplizierung in Aktionsmethoden zu reduzieren.
Tatsächlich können Sie die Regeln gruppieren und die Validierung nur auf die Felder einer bestimmten Gruppe anwenden. Mal sehen, wie das geht.
Ersetzen Sie den Code in application/config/form_validation.php
durch den folgenden.
1 |
<?php
|
2 |
$config = array( |
3 |
'group_one' => array( |
4 |
array( |
5 |
'field' => 'text_field', |
6 |
'label' => 'Text Field One', |
7 |
'rules' => 'required' |
8 |
)
|
9 |
),
|
10 |
'group_two' => array( |
11 |
array( |
12 |
'field' => 'min_text_field', |
13 |
'label' => 'Text Field Two', |
14 |
'rules' => 'required|min_length[8]' |
15 |
),
|
16 |
array( |
17 |
'field' => 'max_text_field', |
18 |
'label' => 'Text Field Three', |
19 |
'rules' => 'required|max_length[20]' |
20 |
)
|
21 |
)
|
22 |
);
|
Suchen Sie in Ihrer configuration
-Methode die folgende Zeile:
1 |
if ($this->form_validation->run() == FALSE) |
Und ersetzen Sie es durch:
1 |
if ($this->form_validation->run('group_one') == FALSE) |
Versuchen Sie nun, ein leeres Formular zu senden, und es wird nur für Text Field One
ein Fehler angezeigt. Das liegt daran, dass wir group_one
als Gruppen-ID übergeben haben, sodass nur die Elemente in dieser Gruppe validiert werden.
Lassen Sie uns abschließend einen Blick auf die Art der Konfiguration werfen, mit der Sie Regeln basierend auf der URL definieren können.
Ersetzen Sie den Code in application/config/form_validation.php
durch den folgenden Code.
1 |
$config = array( |
2 |
'validation/configuration' => array( |
3 |
array( |
4 |
'field' => 'max_text_field', |
5 |
'label' => 'Text Field Three', |
6 |
'rules' => 'required|max_length[20]' |
7 |
)
|
8 |
)
|
9 |
);
|
Bei dieser Art der Konfiguration müssen Sie eine Kombination aus dem Controllernamen und dem Methodennamen verwenden, getrennt durch das Zeichen /
. Auf diese Weise können Sie Regeln für mehrere Aktionsmethoden gleichzeitig definieren.
Jetzt sollten Sie die Fehlermeldung für Text Field Three
sehen, wenn Sie versuchen, ein leeres Formular unter http://your-codeigniter-site/validation/configuration einzureichen.
Und damit endet die Geschichte der Validierungskonfiguration und auch dieser Artikel!
Abschluss
In diesem Artikel haben wir die Formularvalidierung in CodeIgniter ausführlich besprochen.
Wir begannen unsere Reise mit den grundlegenden Validierungsregeln und wechselten dann zu fortgeschritteneren Themen wie Kaskadierung, Vorbereitung und Konfigurationsvalidierung.
Ich hoffe, Ihnen hat dieser Artikel gefallen und Sie können Ihre wertvollen Ansichten über den folgenden Feed teilen!