Username validation
Omdat ik mijn website nu probeer te maken met MVC, wil ik alle validatie laten gebeuren d.m.v een validatie klasse. Tot nu toe heb ik het volgende:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Nu wil ik hier dus o.a. een method maken die de gebruikersnaam controleert, maar houdt dit ook in dat er wordt gecontroleerd of de gebruikersnaam al bestaat? En zo ja; hoe pas ik dit dan toe, want dan zou dit betekenen dat ik deze klasse alleen kan aanroepen in de model (aangezien het een database connectie nodig heeft).
Alvast bedankt!
Gewijzigd op 25/10/2013 22:29:51 door Lord Gaga
Zo bijvoorbeeld:
Code (php)
Online voorbeeld: http://codepad.org/5ReddnFk
Gewijzigd op 25/10/2013 22:57:55 door Eddy E
Eddy E op 25/10/2013 22:55:02:
Dat kan toch veel korter ...
Zo bijvoorbeeld:
Online voorbeeld: http://codepad.org/5ReddnFk
Zo bijvoorbeeld:
Code (php)
Online voorbeeld: http://codepad.org/5ReddnFk
En als ik alleen een minimale lengte wil? Dan moet ik alsnog een maximum invullen..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
class Validator{
private minLength;
private MaxLength;
private $lastError;
public function __construct( $min = 0, $max = 16 ){
$this->minLength = $min;
$this->maxLength = $max;
$this->lastError = '';
}
public function validate( $username ){
if ( $this->minLength > -1 && strlen( $username ) < $this->minLength ){
$this->lastError = 'Username too short';
return false;
}
if ( $this->maxLength > -1 && strlen( $username ) > $this->maxLength ){
$this->lastError = 'Username too long';
return false;
}
//no problem found
return true;
}
public function getLastError(){
return $this->lastError;
}
}
?>
class Validator{
private minLength;
private MaxLength;
private $lastError;
public function __construct( $min = 0, $max = 16 ){
$this->minLength = $min;
$this->maxLength = $max;
$this->lastError = '';
}
public function validate( $username ){
if ( $this->minLength > -1 && strlen( $username ) < $this->minLength ){
$this->lastError = 'Username too short';
return false;
}
if ( $this->maxLength > -1 && strlen( $username ) > $this->maxLength ){
$this->lastError = 'Username too long';
return false;
}
//no problem found
return true;
}
public function getLastError(){
return $this->lastError;
}
}
?>
Erwin H op 26/10/2013 00:47:00:
En beide zou ik niet doen. Op deze manier is het gewoon procedurele code verpakt in een class. Wat het gebruik van objecten nu zo handig maakt is dat je de objecten zelf verantwoordelijk maakt voor hun eigen stukje. In dit geval vraag je alleen of het object alsjeblieft kan checken of een string niet korten of langer is dan een willekeurige waarde. Als je class zelf weet wat de eisen zijn (op basis van bijvoorbeeld geinjecteerde configuratie instellingen), dan wordt het pas interessant, want dan hoeft een ander object dat niet meer te weten.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
class Validator{
private minLength;
private MaxLength;
private $lastError;
public function __construct( $min = 0, $max = 16 ){
$this->minLength = $min;
$this->maxLength = $max;
$this->lastError = '';
}
public function validate( $username ){
if ( $this->minLength > -1 && strlen( $username ) < $this->minLength ){
$this->lastError = 'Username too short';
return false;
}
if ( $this->maxLength > -1 && strlen( $username ) > $this->maxLength ){
$this->lastError = 'Username too long';
return false;
}
//no problem found
return true;
}
public function getLastError(){
return $this->lastError;
}
}
?>
class Validator{
private minLength;
private MaxLength;
private $lastError;
public function __construct( $min = 0, $max = 16 ){
$this->minLength = $min;
$this->maxLength = $max;
$this->lastError = '';
}
public function validate( $username ){
if ( $this->minLength > -1 && strlen( $username ) < $this->minLength ){
$this->lastError = 'Username too short';
return false;
}
if ( $this->maxLength > -1 && strlen( $username ) > $this->maxLength ){
$this->lastError = 'Username too long';
return false;
}
//no problem found
return true;
}
public function getLastError(){
return $this->lastError;
}
}
?>
Maar dit werkt nu dus alleen bij een gebruikersnaam? Deze class was meer bedoeld ter validatie van meerdere strings. Stel dat ik ergens wil checken of de input een string is, dan zou ik bijvoorbeeld dit willen doen:
Uiteindelijk wil ik dit gebruiken om formulieren te valideren (Dit werd op ongeveer deze manier voorgedaan in de tutorial videos van jream op youtube: http://www.youtube.com/watch?v=Aw28-krO7ZM&list=PL7A20112CF84B2229)
En dat komt er dan zo uit te zien uiteindelijk:
Code (php)
1
2
3
2
3
$form = new Form();
$form->post('username')->validate('isset')->validate('minLength', 3)->validate('maxLength', 25)->validate('string');
$form->submit();
$form->post('username')->validate('isset')->validate('minLength', 3)->validate('maxLength', 25)->validate('string');
$form->submit();
(Waarbij de method 'validate' dan weer Validate::minLength($_POST['username'], 3); o.i.d. aanroept)
En nu wil ik dus graag weten hoe ik dit moet doen met het controleren of de gebruikersnaam al bestaat, want hierbij is een database connectie nodig en die is er alleen in de model.
Gewijzigd op 26/10/2013 01:10:15 door Lord Gaga
Door een referentie van je model mee te geven in je klasse?
Reshad F op 26/10/2013 12:07:59:
Door een referentie van je model mee te geven in je klasse?
Oké, en kan ik bij het valideren van de gebruikersnaam het best een een nieuwe method aanmaken die controleert op: lengte, of het al bestaat, geldige karakters, etc.. of kan ik deze het best als losse methods aanroepen?
Je kan hier doen
of gewoon 1 waarde geven
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$naam = 'Lord';
$form = new Validator(0, 3);
$form->validate($naam);
echo $form->getLastError();
?>
$naam = 'Lord';
$form = new Validator(0, 3);
$form->validate($naam);
echo $form->getLastError();
?>
output met code hierboven zal je krijgen : Username too long.