Ovviamente, tutti i metodi cui abbiamo accennato nella lezione precedente non hanno efficacia finché non vengono azionati. Ma non sarà compito della classe AFormCheck
farlo, perché quest'ultima rappresenta solamente un contenitore di funzionalità generali. Sarà infatti una prerogativa della classe FormCheck richiamarli, a seconda che i diversi controlli abbiano esito positivo o meno. Ecco il codice della prima parte di quest'ultima componente:
// ----------------------------------------
// class FormCheck
// extends AFormCheck
// ----------------------------------------
class FormCheck extends AFormCheck {
// metodi di checking
public function checkName() {
if(is_string($this->name) && ctype_alnum($this->name) && (strlen($this->name) <= 10) && (strlen($this->name) >= 4)) {
echo "<p>Il nome è stato inviato correttamente.</p>";
$this->clean['name'] = htmlentities($this->name, ENT_QUOTES);
}
else {
$this->trackErrorMsg('name');
}
}
public function checkLastname() {
if(is_string($this->lastname) && ctype_alnum($this->lastname) && (strlen($this->lastname) <= 15) && (strlen($this->lastname) >= 4)) {
echo "<p>Il cognome è stato inviato correttamente.</p>";
$this->clean['lastname'] = htmlentities($this->lastname, ENT_QUOTES);
}
else {
$this->trackErrorMsg('lastname');
}
}
public function checkEMail() {
if(is_string($this->email) && eregi('^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+.[a-zA-Z.]{2,5}$', $this->email)) {
echo "<p>L'e-mail è stata inviata correttamente.</p>";
$this->clean['email'] = $this->email;
}
else {
$this->trackErrorMsg('email');
}
}
public function checkYear() {
if((intval($this->year) >= 1900)) {
echo "<p>L'anno di nascita è stato inviato correttamente.</p>";
$this->clean['year'] = (int)$this->year;
}
else {
$this->trackErrorMsg('year');
}
}
// ...
Tutti questi metodi servono per effettuare il checking dei valori forniti dagli utenti:
- il metodo
checkName
controlla che il nome sia una stringa alfanumerica e che sia composto da un numero di caratteri compreso tra 4 e 10 - il metodo
checkLastame
controlla che il cognome sia una stringa alfanumerica e che sia composto da un numero di caratteri compreso tra 4 e 15 - il metodo
checkEmail
controlla che l' e-mail sia fornita in una forma corretta tramite una Regular Expression - il metodo
checkYear
controlla che l'anno di nascita sia maggiore o uguale a 1900
In tutti i casi, se il controllo va a buon fine, l'array clean
viene riempito con i valori forniti dall'utente (alcuni vengono "puliti" ulteriormente con funzioni che PHP fornisce internamente), altrimenti viene registrato l'apposito errore.
A questo punto il 90% della nostra gerarchia Object Oriented è stato realizzato. Vediamo dunque di colmare il rimanente 10% analizzando gli ultimi due metodi della classe FormCheck
:
// ...
public function checkAll() {
$this->checkName();
$this->checkLastname();
$this->checkEMail();
$this->checkYear();
return $this->getErrorMsg();
}
// altro
public function setErrorMsgs($errs) {
foreach($errs as $err => $txt) {
$this->errorMsgs[$err] = $txt;
}
}
}
Il metodo checkAll
, che rappresenta il metodo pubblico che verrà utilizzato maggiormente, fornisce sostanzialmente due funzionalità fondamentali:
- richiamare tutti gli altri metodi di checking definiti in precedenza (
checkName
,checkLastname
,checkEMail
,checkYear
) - azionare il metodo
getErrorMsg
ereditato dalla classeAFormCheck
per vedere se sono stati registrati errori e generare di conseguenza gli appositi messaggi
Il metodo setErrorMsgs
infine, accetta un array con coppie key/value impostate rispettivamente a "campo/testo di errore", per personalizzare i messaggi di testo standard forniti dalla classe AFormCheck
.
A questo punto siamo arrivati al completamento della nostra gerarchia. L'unica cosa che manca è la visualizzazione pratica dell'applicazione in uno scenario reale, che affronteremo nella prossima lezione.