Salut.
Il y a plusieurs choses à revoir.
Quand tu fais
ça appelle validation() qui renvoit à chaque fois une nouvelle instante de Validator. Je pense que tu veux UNE instance pour toute la validation, non ? Dans ce cas tu mets l'instantiation dans le contructeur :
et au lieu d'appeler $this->validation()->Content tu appelles $this->validator->Content.
Ensuite :
Il serait mieux de passer les valeurs à vérifier en paramètres plutôt que d'utiliser directement $_POST dans la méthode.
Idem avec $content = strip_tags(trim($_POST['f_topic_content']));. Passe le contenu en param car si jamais tu décides de renommer f_topic_content il va falloir changer $_POST['f_topic_content'] partout.
Ensuite
ici $errors n'est pas défini, car la variable $errors n'est pas déclarée dans la portée de la fonction, donc ça sera toujours considéré comme empty et la fonction retournera toujours ''.
Attention avec les return dans les foreach : ça va sortir de la fonction au premier passage :
Enfin, ton validator ne devrait pas faire de formattage, c'est à dire ne pas générer de HTML car tu peux imaginer utiliser ce validator dans un appel API qui va renvoyer du JSON.
Je changerais donc la méthode errors comme suit :
Je pense qu'il faudrait que tu te couches tout ça sur papier et que tu repenses à ce que tu veux faire. J'ai l'impression que c'est encore un peu flou pour toi.
Une technique que je donne souvent c'est d'essayer d'expliquer ce que tu veux faire à un enfant de 8 ans. Ça permet de vulgariser et d'aller à l'essentiel.
En gros le scénario de ton appli est le suivant :
- utilisateur envoie un formulaire
- un Validator vérifie les données
- si pas d'erreur (
$validator->isRequestValid()ou$validator->hasErrors()par exemple) alors tu peux enregistrer les données en base. - sinon on affiche les erreurs : récup des messages erreurs puis la vue les affiche en rouge et en gras par exemple.
À un enfant de 8 ans : je demande des informations à un utilisateur et si c'est bon je les garde, sinon je lui dis ce qui ne va pas.
Voilà, j'espère que ça t'aide un peu. :)